标签: bindingsource

如何将BindingSource当前记录设置为null?

我有一个工作订单的捕获表单,它有一个CustomerBindingSource和一个WorksOrderBindingSource控件.大多数编辑字段都绑定到WorksOrderBindingSource,其中一个ComboBox的列表绑定到CustomerBindingSource,并且它SelectedValue绑定到的CustomerId字段WorksOrderBindingSource.这都是非常常规和标准的,这里没有任何好玩的东西.

然后,我还有一些文本框字段,我用它来显示当前所选客户的属性,用于当前编辑的工单.我也将这些领域捆绑在一起CustomerBindingSource.选择客户后,这些字段会按预期显示该客户的属性.

我的问题是当我想使用表单捕获新的工作订单时.我实例化一个新WorksOrder对象,CustomerId == null并将其绑定到WorksOrderBindingSource.我在没有对象CustomerBindingSourceId == null,因此,如预期,下拉组合框为空,但是,该CustomerBindingSource.Current属性指向该数据源的第一个客户对象.客户链接的显示字段显示该客户的值,而尚未选择任何客户.

对我而言,唯一可行的解​​决办法似乎很笨拙.在其中,我有两个客户类型的绑定源,一个用于选定的客户,并填充客户显示字段,另一个仅用于填充客户下拉列表.然后,我必须处理选择事件,并且仅当选择了客户时,才在显示字段的绑定源中找到该客户,如果没有选择,则将显示字段的数据源设置为null.这感觉非常笨拙.有没有其他方法可以实现我想要的?

data-binding bindingsource winforms

6
推荐指数
1
解决办法
4238
查看次数

"BindingSource不能是它自己的数据源" - 尝试从另一个类中的方法重置绑定源时出错

我们绑定一个DataGridview使用BindingSource.所以在我们这样给出的主线程中.

            class1BindingSource = new BindingSource();
            class1BindingSource.DataSource = class1List;  
            this.dataGridView1.DataSource = class1BindingSource;
Run Code Online (Sandbox Code Playgroud)

之后,我在窗体中放置了一个后台工作器,并在单击按钮时触发.

即在按钮单击中

this.backgroundWorker1.RunWorkerAsync()
Run Code Online (Sandbox Code Playgroud)

BackgroundWorker DoWork Event我试图BindingSource通过尝试更新来更新和那里DataGridview.

因此,BindingSource重置是在另一个类的方法中完成的.

DoWork Event

Class2 cl2 = new Class2();
cl2.UpdateBindingSource(class1BindingSource);
Run Code Online (Sandbox Code Playgroud)

UpdateBindingSource Method

public void UpdateBindingSource(BindingSource bs)
        {
            Class1 c1 = bs.Current as Class1;    
            for (int i = 0; i < 1000; i++)
            {
                lock (bs.SyncRoot)
                {
                    c1.MyProperty1 = i;
                    bs.ResetItem(0);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

现在我得到一个例外,就像BindingSource它不能成为自己的数据源一样.不要将DataSourceDataMember属性设置为引用的值BindingSource. …

datagridview backgroundworker thread-safety bindingsource winforms

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

从BindingSource的最后一次EndEdit调用后撤消所有更改

这是场景(使用绑定到DataSet中的DataTable的BindingSource):

  1. 用户创建新的地址簿联系人,填写数据绑定控件中的名字和姓氏.
  2. 他按下Apply,其事件处理程序调用BindingSource.EndEdit().
  3. 然后他意识到有一个错误,并添加了一个电子邮件地址.
  4. 但是当他按下Apply时,验证失败(电子邮件格式无效),因此不会调用EndEdit().
  5. 他决定不进行编辑,并按下取消按钮,其事件处理程序调用BindingSource.CancelEdit().
  6. 但是,BindingSource不是仅使用名字和姓氏而没有电子邮件恢复到新联系,而是取消了整个记录.

自上次调用EndEdit()以来,有没有办法只撤消操作?我的印象是,CancelEdit()应该是如何工作的.

.net c# data-binding ado.net bindingsource

5
推荐指数
1
解决办法
4242
查看次数

如何按日期对DataGridView列(绑定到BindingSource)进行排序?

我有一个DataGridView,其中包含包含日期的列.不幸的是,日期的格式为DD.MM.YYYY,整个值为1列,这是欧洲的常用日期格式.DGV与BindingSource绑定,后者能够进行排序和高级排序.

问题如下:如果我只使用DGV的标准排序,日期被视为字符串(它们显示在DataGridViewTextBoxColumn中),因此按日 - >月 - >年排序,但当然我想要完全相反; 我希望他们按时间顺序排序.

那么,有没有办法按照我希望的方式对这些列进行排序?

  • 到目前为止,最简单的方法是能够使用DGV的SortCompare事件,但显然如果DGV绑定到DataSoruce则无法完成.
  • 当然我使用谷歌,我总是得到"使用排序属性进行高级排序"的解决方案.绑定到DGV的BindingSource确实支持排序和高级排序,但据我了解,这只是让我有可能按多列排序,并没有提供一种方法来按日排序日期列 - > month-> day(或更一般的术语允许我实现一种比较功能).或者我错过了什么?

我有什么选择可以实现我想要的?在解释时,请记住,我对这个Windows窗体的东西不熟悉编程.

提前致谢!

.net c# datagridview bindingsource winforms

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

如何对绑定到自定义对象集合的 DataGridView 进行排序?

因此,我一直在遵循Windows 窗体控件上的数据绑定指南(MAD 支持作者,该指南很棒),并且我使用它来创建自定义类并将 a 绑定DataGridView到此类的集合:

class CompleteJobListEntry
{
    private string _jobName;
    private Image _jobStatus;
    private DateTime _jobAddedDate;
    private string _jobAddedScanner;
    private string _jobAddedUser;
    private string _jobLastActivity;
    private DateTime _jobActivityDate;
    private string _jobActivityUser;

    public string JobName { get { return _jobName; } set { this._jobName = value; } }
    public Image JobStatus { get { return _jobStatus; } set { this._jobStatus = value; } }
    public DateTime JobAddedDate { get { return _jobAddedDate; } set { this._jobAddedDate …
Run Code Online (Sandbox Code Playgroud)

c# datagridview bindingsource winforms

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

DataGridView AllowUserToAddRow 属性不起作用

我有一个使用实体框架的简单项目,我有一个DataGridViewForm并将其AllowUserToAddRow属性设置为true,但我仍然无法向其中添加新行。

这是我的代码:

DBEntities context = new DBEntities();
private void Form1_Load(object sender, EventArgs e)
{
    var q = (from i in context.myTable
             select i).ToList();
    DataGridView.DataSource = q;
}

private void btnSave_Click(object sender, EventArgs e)
{
    context.SaveChanges();
    MessageBox.Show("saved successfully");
}
Run Code Online (Sandbox Code Playgroud)

如果我使用BindingSource控件,它允许我插入行,DataGridView但是在context.SaveChanges()我在数据库文件中不调用任何插入之后,使用这种方法。所以我想也许与这个问题有关,DataGridView属性true AllowUserToAddRow不允许我在 中插入行DataGridView

c# linq entity-framework datagridview bindingsource

5
推荐指数
1
解决办法
6966
查看次数

datagridview 绑定源过滤器

我正在尝试从 BindingSource 中过滤数据 - 但它不起作用。我究竟做错了什么?我已将我的代码简化为一个简约的示例。

问题是,如果我在 TextBox 中输入一些东西 - 没有任何反应。

public partial class Form1 : Form
{
    BindingSource bs = new BindingSource();

    public Form1()
    {
        InitializeComponent();
        List<myObj> myObjList= new List<myObj>();
        myObjList.Add(new myObj("LastNameA", "Peter"));
        myObjList.Add(new myObj("LastNameA", "Klaus"));
        myObjList.Add(new myObj("LastNameB", "Peter"));

        foreach (myObj obj in myObjList)
        {
            bs.Add(obj);
        }
        dataGridView1.DataSource = bs;
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        bs.Filter = string.Format("Name LIKE '%{0}%'", textBox1.Text);
        dataGridView1.Refresh();
    }

}

public class myObj
{
    public myObj(string LastName, String Name)
    {
        this.LastName = LastName; …
Run Code Online (Sandbox Code Playgroud)

c# datagridview filter bindingsource

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

使用BindingSource(Of CustomClassObjects)进行DataGridView过滤

我想过滤我的DataGridView数据.我的DataGridView的DataSource绑定到了BindingSource.BindingSource包含我clsBillHeader班级中的对象列表.

这是第一段代码:

Dim bSource As New BindingSource
bSource.DataSource = clsBillHeader.GetAll()
dgvBills.DataSource = bSource
bSource.Filter = "JobNumber Like '100%'" //Filter doesn't actually work
Run Code Online (Sandbox Code Playgroud)

得到所有()

Public Shared Function GetAll() As List(Of clsBillHeader)
    Dim mycn As New SqlConnection(connection)
    Dim mycmd As New SqlCommand("SELECT * FROM Headers", mycn)
    mycn.Open()
    Dim myreader As SqlDataReader = mycmd.ExecuteReader
    Dim myList As New List(Of clsBillHeader)
    While myreader.Read
        Dim item As New clsBillHeader()
        SetByReader(myreader, item) //Sets all values correctly (such as forein keys)
        myList.Add(item)
    End …
Run Code Online (Sandbox Code Playgroud)

c# vb.net datagridview bindinglist bindingsource

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

什么是Delphi/AppMethod BindSourceDB范围映射以及如何使用它们?

我正在使用Delphi/AppMethod XE6,并将Firemonkey Mobile HD表单添加到空白项目中.

在表单上,​​我删除了一个BindSourceDB组件,并在结构窗口中查看它,在那里,我可以看到一个ScopeMappings子属性.我还可以ScopeMappingsObject Inspector窗口中看到该属性,它显示了它的TScopeMappings类型.

对于我的生活,我无法弄清楚这个属性是什么/做什么,以及ScopeMappings到底是什么.

我从Embarcadero文档中找到的全部内容如下:http: //docwiki.embarcadero.com/Libraries/XE6/en/Data.Bind.DBScope.TBindSourceDB.ScopeMappings

Data.Bind.DBScope.TBindSourceDB.ScopeMappings

ScopeMappings属性指定一个拥有的集合,其元素是范围映射.ScopeMappings用于添加可以由引用此源组件的表达式引用的名称/值对.

显然,这不是非常有用.

我在网上到处搜索,包括这里的SO,找不到任何东西.请帮忙.

delphi bindingsource delphi-xe6 appmethod

5
推荐指数
1
解决办法
814
查看次数

无法在DataSource上找到DataMember属性"关系键"

我目前有一个DataSet,其中有几个表用于C#Windows应用程序.我有一个父表,此集中的所有其他表都是与父表中的ID列有关系的子表.

我刚刚添加了一个新表,并通过向导和设计器与父表建立了必要的关系,而不是编码.但是,当我转到我的表单并尝试在BindingSource的属性屏幕上更改DataMember时,它找不到我刚刚在下拉菜单中创建的关系.我尝试手动输入关系的名称,我收到标题中列出的错误消息.

我之前从未遇到过这个问题,因为我已经将子表添加到DataSet然后为它们更改了DataMembers,所以我不确定从哪里开始以解决此问题.任何帮助都会很棒.

如果您需要更多信息,请与我们联系.

编辑:我还应该补充说,它似乎只发生在这一个DataSet上.我尝试将完全相同的表添加到我拥有的不同DataSet中,并且所有工作都没有问题.

c# datasource bindingsource datamember

5
推荐指数
0
解决办法
344
查看次数