我的 Windows 窗体中有一个 datagridview。那是根据组合框中的选定值从数据库中填充数据。对于某些选定的项目,数据库中有记录。有些人没有记录。那时我需要维护一个固定大小的datagridview,其中没有填充任何记录。有没有办法做到这一点。如果是,请帮助我...
问问题
2148 次
1 回答
0
如果您的数据源看起来与此类似:
public class MyDataSource : IEnumerable<SomeClass>
{}
- 你可以简单地这样做:
public IEnumerator<SomeClass> GetEnumerator()
{
if (sourceItems == null)
{
yield return SomeClass.Empty;
//as many times as you want "empty" lines in datagrid
}
else
{
foreach (var item in sourceItems)
yield return item;
}
}
“sourceItems”是“SomeClass”类型的项目的内部列表。有很多方法可以做到这一点,这只是其中之一。
您今天所做的是从数据库加载数据并将结果直接写入 datagridview。我的建议是从数据库加载数据(就像现在一样),而不是将数据写入数据网格,而是创建一个类来保存项目(数据源类)。然后将该类提供给类似于以下的数据网格:
MyDataSource ds = new MyDataSource();
GetDataFromDatabase().Select(p=>ds.Add(p));
BindingSource bs = new BindingSource(ds, ");
theDataGrid.DataSource = bs;
然后使用 BindingSource 来控制内容(只是为了展示一些你可能会做的事情):
bs.AllowNew = false;
bs.Position = bs.Count - 1;
bs.ListChanged += new ListChangedEventHandler(bindingSource_ListChanged);
bs.CurrentItemChanged += new EventHandler(bindingSource_CurrentItemChanged);
于 2012-10-10T12:22:42.873 回答