我有一个工作订单的捕获表单,它有一个CustomerBindingSource和一个WorksOrderBindingSource控件.大多数编辑字段都绑定到WorksOrderBindingSource,其中一个ComboBox的列表绑定到CustomerBindingSource,并且它SelectedValue绑定到的CustomerId字段WorksOrderBindingSource.这都是非常常规和标准的,这里没有任何好玩的东西.
然后,我还有一些文本框字段,我用它来显示当前所选客户的属性,用于当前编辑的工单.我也将这些领域捆绑在一起CustomerBindingSource.选择客户后,这些字段会按预期显示该客户的属性.
我的问题是当我想使用表单捕获新的工作订单时.我实例化一个新WorksOrder对象,CustomerId == null并将其绑定到WorksOrderBindingSource.我在没有对象CustomerBindingSource有Id == null,因此,如预期,下拉组合框为空,但是,该CustomerBindingSource.Current属性指向该数据源的第一个客户对象.客户链接的显示字段显示该客户的值,而尚未选择任何客户.
对我而言,唯一可行的解决办法似乎很笨拙.在其中,我有两个客户类型的绑定源,一个用于选定的客户,并填充客户显示字段,另一个仅用于填充客户下拉列表.然后,我必须处理选择事件,并且仅当选择了客户时,才在显示字段的绑定源中找到该客户,如果没有选择,则将显示字段的数据源设置为null.这感觉非常笨拙.有没有其他方法可以实现我想要的?
我们绑定一个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它不能成为自己的数据源一样.不要将DataSource和DataMember属性设置为引用的值BindingSource. …
datagridview backgroundworker thread-safety bindingsource winforms
这是场景(使用绑定到DataSet中的DataTable的BindingSource):
自上次调用EndEdit()以来,有没有办法只撤消操作?我的印象是,CancelEdit()应该是如何工作的.
我有一个DataGridView,其中包含包含日期的列.不幸的是,日期的格式为DD.MM.YYYY,整个值为1列,这是欧洲的常用日期格式.DGV与BindingSource绑定,后者能够进行排序和高级排序.
问题如下:如果我只使用DGV的标准排序,日期被视为字符串(它们显示在DataGridViewTextBoxColumn中),因此按日 - >月 - >年排序,但当然我想要完全相反; 我希望他们按时间顺序排序.
那么,有没有办法按照我希望的方式对这些列进行排序?
我有什么选择可以实现我想要的?在解释时,请记住,我对这个Windows窗体的东西不熟悉编程.
提前致谢!
因此,我一直在遵循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) 我有一个使用实体框架的简单项目,我有一个DataGridView,Form并将其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。
我正在尝试从 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) 我想过滤我的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) 我正在使用Delphi/AppMethod XE6,并将Firemonkey Mobile HD表单添加到空白项目中.
在表单上,我删除了一个BindSourceDB组件,并在结构窗口中查看它,在那里,我可以看到一个ScopeMappings子属性.我还可以ScopeMappings在Object Inspector窗口中看到该属性,它显示了它的TScopeMappings类型.
对于我的生活,我无法弄清楚这个属性是什么/做什么,以及ScopeMappings到底是什么.
我从Embarcadero文档中找到的全部内容如下:http: //docwiki.embarcadero.com/Libraries/XE6/en/Data.Bind.DBScope.TBindSourceDB.ScopeMappings
Data.Bind.DBScope.TBindSourceDB.ScopeMappings
ScopeMappings属性指定一个拥有的集合,其元素是范围映射.ScopeMappings用于添加可以由引用此源组件的表达式引用的名称/值对.
显然,这不是非常有用.
我在网上到处搜索,包括这里的SO,找不到任何东西.请帮忙.
我目前有一个DataSet,其中有几个表用于C#Windows应用程序.我有一个父表,此集中的所有其他表都是与父表中的ID列有关系的子表.
我刚刚添加了一个新表,并通过向导和设计器与父表建立了必要的关系,而不是编码.但是,当我转到我的表单并尝试在BindingSource的属性屏幕上更改DataMember时,它找不到我刚刚在下拉菜单中创建的关系.我尝试手动输入关系的名称,我收到标题中列出的错误消息.
我之前从未遇到过这个问题,因为我已经将子表添加到DataSet然后为它们更改了DataMembers,所以我不确定从哪里开始以解决此问题.任何帮助都会很棒.
如果您需要更多信息,请与我们联系.
编辑:我还应该补充说,它似乎只发生在这一个DataSet上.我尝试将完全相同的表添加到我拥有的不同DataSet中,并且所有工作都没有问题.
bindingsource ×10
c# ×7
datagridview ×6
winforms ×4
.net ×2
data-binding ×2
ado.net ×1
appmethod ×1
bindinglist ×1
datamember ×1
datasource ×1
delphi ×1
delphi-xe6 ×1
filter ×1
linq ×1
vb.net ×1