0

我的 Windows 窗体中有一个 datagridview。那是根据组合框中的选定值从数据库中填充数据。对于某些选定的项目,数据库中有记录。有些人没有记录。那时我需要维护一个固定大小的datagridview,其中没有填充任何记录。有没有办法做到这一点。如果是,请帮助我...

4

1 回答 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 回答