标签: bindingsource

选择新添加的Row - DataGridView和BindingSource

我正在向绑定到DataGridView的BindingSource添加一个新的Row

source.AddNew();
Run Code Online (Sandbox Code Playgroud)

在此之后,使用BindingSource获取新添加的行,在其排序时返回DataGridView中的下一行.

ROW "A"
ROW "B" <- myBindingSource.AddNew();
ROW "C"
Run Code Online (Sandbox Code Playgroud)

myBindingSource.Current给出ROW"C".(它成为DataGridView中的选定行)

我需要这个,因为我想只更新新添加的行

            DataRowView drv = (DataRowView)myBindingSource.Current;
            myTableAdapter.Update(drv.Row);
Run Code Online (Sandbox Code Playgroud)

而不是整个表.

            myTableAdapter.Update(myDataSet.myTable);
Run Code Online (Sandbox Code Playgroud)

而且,我想在插入后在DataGridView中选择这个新添加的行.

有可能吗?

c# datagridview bindingsource sql-server-ce winforms

4
推荐指数
1
解决办法
2万
查看次数

C#:使用代码将列添加到绑定DatagridView

//从此Admin类获取数据:

public static IQueryable<Student> GetStudents()
{
    DojoDBDataContext conn = new DojoDBDataContext();

    var query =
        from s in conn.Students
        join b in conn.Belts on s.BeltID equals b.ID
        orderby s.LastName ascending
        select s;

    return query;
}
Run Code Online (Sandbox Code Playgroud)

//在我的表格上:

BindingSource bs = new BindingSource();

    private void fillStudentGrid()
    {
        bs.DataSource = Admin.GetStudents();
        dgViewStudents.DataSource = bs;
        dgViewStudents.Columns.Remove("ID");
    }
Run Code Online (Sandbox Code Playgroud)

工作完全正常,但我不想删除我不想要的20多列数据,而是只添加我做的几个.此外,获得标题标题的名称是一个奖励.但是,add方法对我不起作用:

private void fillStudentGrid()
{
    bs.DataSource = Admin.GetStudents();

    dgViewStudents.AutoGenerateColumns = false;
    dgViewStudents.DataSource = bs;
    dgViewStudents.Columns.Add("ID", "ID Number");
}
Run Code Online (Sandbox Code Playgroud)

我得到适当的行数,列标题设置正确...但行填充空白数据.

c# linq datagridview bindingsource winforms

4
推荐指数
1
解决办法
3万
查看次数

使用BindingSource非常慢?

我有一个C#Windows窗体项目,其中包含一个包含2个ListBox和一个按钮的Form.在FormLoad上,左侧ListBox填充了一个列表(大约1800个项目),其中包含有关证券(ID和名称)的信息,当用户点击按钮时,所有证券都从左侧列表框移动到右侧.

当我没有使用BindingSources时,即我直接使用ListBoxes的Items属性时,移动过程需要几秒钟:

private void button1_Click(object sender, EventArgs e)
{
    while (listBox1.Items.Count > 0)
    {
         Security s = listBox1.Items[0] as Security;
         listBox1.Items.Remove(s);
         listBox2.Items.Add(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用BindingSources时,它需要几分钟:

listBox1.DataSource = bindingSource1;
listBox2.DataSource = bindingSource2;

...

private void MainForm_Load(object sender, EventArgs e)
{
    ICollection<Security> securities = GetSecurities();
    bindingSource1.DataSouce = securities;
}

private void button1_Click(object sender, EventArgs e)
{
    while (bindingSource1.Count > 0)
    {
        bindingSource1.Remove(s);
        bindingSource2.Add(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

BindingSource方式需要更长时间的原因是什么?有没有办法让它更快?

.net listbox bindingsource winforms

4
推荐指数
1
解决办法
4069
查看次数

绑定源过滤

希望你能帮我这个忙。

我想datagridview通过使用诸如名称之类的特定关键字来过滤我的内容。我使用了一个数据集,然后将其绑定到数据源,然后再绑定到我datagridview的视图中。

当我使用时,bindingsource.filter我无法获得任何结果。

这是我的代码:

    Dim ds As New DataSet
    Dim bs As New BindingSource

    Dim sql As String = "SELECT TOP 10 * FROM dbo.DimCustomer"
    Dim connection As New SqlConnection(sqlconnectionstring)
    Dim dataadapter As New SqlDataAdapter(sql, connection)



    connection.Open()
    ds.Clear()
    dataadapter.Fill(ds, "Customer")
    connection.Close()


    bs.DataSource = ds

    dgv1.DataSource = bs
    dgv1.DataMember = "Customer"
    bs.Filter = "FirstName = 'Jon'"
Run Code Online (Sandbox Code Playgroud)

vb.net datagridview filter bindingsource

4
推荐指数
1
解决办法
2万
查看次数

强类型绑定源过滤器

构建BindingSource.Filter感觉等的丑陋,手册,被迫滤波已经检索到的数据的方式.

  1. 没有明确的类型检查
  2. 没有明确的列名检查
  3. 没有明确的SQL语法检查
  4. 需要手动ToString()格式化
  5. DataSet 设计变更未传播到 Filter
  6. Filter从多个控件管理多个条件很快就会变得乏味,容易出错并且难以处理.

使用a typedTableAdapter.FillBy(typedDataSet.typedTable, @params ...)是一种强大,简单,直接的方法,用于在数据库和数据库之间进行"过滤" DataSet.

.NET是否在强类型控件DataSetForm控件之间提供任何强类型过滤(可能通过a BindingSource)?

初始赏金:
最初的赏金是为概念证明而授予的(使用LINQ查询作为DataSource).但是,它没有演示如何实际访问强类型typedTableRow以执行过滤.

额外奖励:
所有铸件通过IList,DataView,DataRowView,DataRow,和typedTableRow已被证明是相当混乱.

Object                         Generic       Watch List Type
------                         --------      ------------
myBindingSource.List           IList         {System.Data.DataView}
myBindingSource.List[0]        object        {System.Data.DataRowView}

((DataRowView)myBindingSource.List[0]).Row
                               DataRow       typedTableRow
Run Code Online (Sandbox Code Playgroud)

表现出BindingSourceDataSource使用强类型的LINQ查询(即:与typedTableRow字段访问.Where( ... …

.net c# bindingsource winforms

4
推荐指数
2
解决办法
1940
查看次数

实体框架:C#Winforms在datagridview上删除了绑定源,但是将isDeleted字段标记为仅true(不删除)

我目前正在使用Entity Framework 5开发C#Winforms应用程序。

我的问题是如何对绑定到的项目进行删除(仅将isDeleted字段标记为true)。bindingsourceentity

这是我的表单的屏幕截图:

登记药物表格

DataGridView必然enrollmedsBindingSource。请参阅以下表单加载代码,该代码填充绑定源:

    private void EnrollMedicationFrm_Load(object sender, EventArgs e)
    {
        context.enrollmeds.Where(adm => adm.FK_Admission == _SelectedPKAdm && adm.isDeleted == false).ToList();
        enrollmedsBindingSource.DataSource = context.enrollmeds.Local;
    }
Run Code Online (Sandbox Code Playgroud)

如您在上面的代码中看到的,我过滤了数据以仅显示isDeleted设置为false 的数据。

以下是我的删除按钮的代码:

    private void DeleteBtn_Click(object sender, EventArgs e)
    {
        if (enrollmedsDataGridView.CurrentRow == null)
        {
            MessageBox.Show("No item selected.", "System Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            enrollmedsBindingSource.Remove(enrollmedsBindingSource.Current);
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我调用context.SaveChanges();保存按钮,此代码将从数据库中删除该项目。

以下是保存按钮的代码:

    private void SaveBtn_Click(object sender, EventArgs e)
    {
        this.enrollmedsBindingSource.EndEdit();
        context.enrollmeds.Local
            .Where(a …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework datagridview bindingsource winforms

4
推荐指数
1
解决办法
1080
查看次数

我可以从BindingSource获取项目类型吗?

我想获得BindingSource连接或配置的项目类型.BindingSource.DataSource属性可以设置为对象,列表或类型.如果它是一个Type,它显然还没有绑定项,但我仍然希望得到Type.对于List,我需要项目Type,而不是列表类型.

我目前有一个自定义列表类型用于实现IListItemType接口的业务对象,我创建这个接口是为了解决这个问题.我现在想以更通用的方式使用它,以便它可以用于任何列表.

我已经查看了API文档以获得这样做的好方法,但到目前为止我还没有运气.我错过了什么,或者这只是我不能或不应该做的事情?

c# vb.net bindingsource winforms

3
推荐指数
1
解决办法
3659
查看次数

将 BindingSource 的过滤结果获取到表/数据集?

我正在使用BindingSource连接到 aDataGridView来过滤显示的数据。

我想知道将过滤结果获取到 GridView 之外的其他东西的最佳方法是什么?

我问这个是因为我想将过滤后的结果用于一些ComboBoxes。现在,我通过由 BindingSource 过滤的 DataTable 来填充这些内容。

简而言之,如何获取过滤的 BindingSource 结果作为 a 之外的其他内容的源DataGridView

c# combobox bindingsource

3
推荐指数
1
解决办法
6567
查看次数

将 IQueryable 转换为 BindingList

ObsevableCollection User数据源作为详细信息放置在新表单上,它会创建所有文本框、BindingSource 和 BindingNavigator。这是优秀和快速的。

因为我只需要更新一个用户,所以我删除了 BindingNavigator。但...

这可以不转换列表吗?

class UserDt : Forms {
    // Designer partial part
    this.userBindingSource.DataSource = typeof(WinFormswithEFSample.User);

    private void UserDt_Load
    {
        _context.Users.Load();

        // use this with BindNavigator to navigate ower all users
        //this.userBindingSource.DataSource = _context.Users.Local.ToBindingList();

        // this doesn't work
        //this.userBindingSource.DataSource = _context.Users.Where(p => p.Username == "admin").Local.ToBindingList();

        var query = _context.Users.Where(p => p.Username == "admin").ToList();
        var binding = new BindingList<User>(query);
        this.usersBindingSource.DataSource = binding;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework bindingsource winforms

3
推荐指数
1
解决办法
5487
查看次数

当 DataSource 是 BindingList 时过滤 BindingSource

我从excel表中读取并为BindingList写了这个,在Form_Load中,它被设置为一个数据源作为BindingSource:

bd = new BindingSource(); //instance of BindingSource
bd.DataSource = ExcelOPS.LerExcel(); //LerExcel() method return a BindingList<T>

gvFiltro.DataSource = bd; //set a DataGridView named gvFiltro DataSource property
bindNav.BindingSource = bd; //set a BindingNavigator source
Run Code Online (Sandbox Code Playgroud)

这工作很好!我打算为此 DataGridView gvFiltro 创建一个组合框作为过滤器,因此在组合框的 SelectedIndexChanged 事件中,我尝试这样做:

this.gvFiltro.DataSource = null;
bd.Filter = string.Format("TAG_FAZENDA like '%{0}%'", cbTagFaz.Text);
gvFiltro.DataSource = bd;
gvFiltro.Update();
gvFiltro.Refresh();

bindNav.BindingSource = bd;
bindNav.Update();
bindNav.Refresh();
Run Code Online (Sandbox Code Playgroud)

但是 DataGridView 不会改变。我错过了什么?

.net c# datagridview bindingsource winforms

3
推荐指数
1
解决办法
8344
查看次数