0

Windowsフォームに1つの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」タイプのアイテムの内部リストです。これを行うには多くの方法があり、これはそのうちの1つにすぎません。

今日行っているのは、データベースからデータをロードし、その結果を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 に答える