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