DataGridViewにバインドされたDataTableがあります。 DGVでFullRowSelectを有効にしました。選択した行をDataRowとして取得して、選択した行の値に強く型付けされたアクセスを取得できるようにする方法はありますか?
BindingSourceなしでそれを行う方法がわかりません。これを1つで行う方法は次のとおりです。
var drv = bindingSoure1.Current as DataRowView;
if (drv != null)
var row = drv.Row as MyRowType;
DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem
DataRow row = currentDataRowView.Row
次のプロパティを取得することで可能です。
this.dataGridView.SelectedRows
タイプのコレクションを取得します:DataGridViewSelectedRowCollection。タイプのアイテムが含まれています:DataGridViewRow。
次に、次の方法で独自のタイプのbounditemを取得できます。
DataGridViewSelectedRowCollection list = this.dataGridViewInventoryRecords.SelectedRows;
MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item
選択した行を、DataGridViewにバインドされた強く型付けされた行に直接キャストできるはずです。
データセット内でtableadapterが使用されていない場合、datagridviewに強く型付けされたアクセス権を持つことはできません。
Datagridviewがbindingsourceを介してdatatableにバインドされているときに、強く型付けされた変数にアクセスするには、次のようにします。
新しいプロジェクトを作成します。
Ds1という名前のDataSetとdt99という名前のDataTableを、両方とも文字列型のDataColumn1とDataColumn2という名前の列とともに挿入します。
DatagridViewをメインフォームに追加し、それをdt99にバインドします
Dt99BindingSourceがdatagridviewとdatatableを接続するように
Datagridviewの選択変更のイベントハンドラーを追加し、次のコードを挿入します
private void dataGridView1_SelectionChanged(Object sender、EventArgs e){
ds1.dt99Row d= ((ds1.dt99Row)((DataRowView)dt99BindingSource.Current).Row);
Debug.WriteLine(d.DataColumn1 + " " + d.DataColumn2);
}
これで、データグリッドビューで選択されているセルにアクセスするための変数(d.DataColumn1およびd.DataColumn2)を強く入力しました。
もう1つの興味深い機能は、データセット内に挿入されたデータテーブルが、たとえばデータテーブルを処理するときに非常に役立つ一連のパブリッククラスを提供することです。
private void Form1_Load(Object sender, EventArgs e)
{
ds1.dt99.Adddt99Row("K", "B");
ds1.dt99.Adddt99Row("L", "D");
ds1.dt99.Adddt99Row("M", "F");
ds1.dt99.Adddt99Row("N", "H");
ds1.dt99Row dr = ds1.dt99.Newdt99Row();
dr.DataColumn1 = "X";
dr.DataColumn2 = "Y";
ds1.dt99.Adddt99Row(dr);
}
Datagridviewをデータベース内のテーブルまたはビューにバインドしている場合は、データを厳密に型指定されたオブジェクトとして取得できます。
この回答は、設計時にDataSetを使用してデータベースに接続したWindowsフォームに対するものです。サンプル名はDataSet1で、サンプルテーブル名はCustomer_Infoです。
// cast the data bound item to DataRowView so you have
// access to "Row", which
// has the actual data for the row in typed fields.
DataRowView drv = dgv.SelectedRows(0).DataBoundItem as DataRowView;
// run the code and look at the debugger value of drv.Row --
// the type will be shown
// which is the type created by the data binding, representing
// your table or view
//{YourDataSetName.YourTableOrViewType} tmpTableData = drv.Row as {YourDataSetName.YourTableOrViewType};
DataSet1.Customer_InfoRow tmpTableData = drv.Row as DataSet1.Customer_InfoRow;
このリンクが答えです。上記の明確さと例を追加したと思います。 https://social.msdn.Microsoft.com/Forums/windows/en-US/f252e395-58e6-4703-ba7b-0740efcbecf3/can-i-convert-the-selected-row-in-a- bound-datagridview-to-a-typed-datarow?forum = winformsdatacontrols
このリンクは、既存のデータベースからそのデータをプルするのではなく、プログラムでデータソースに追加されたデータを示しています。これは私に答えへの道の一部をもたらしました: https://msdn.Microsoft.com/en-us/library/4wszzzc7(v = vs.110).aspx
あなたはこれを試してみます。
DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
if (row != null)
_{
_ XtraMessageBox.Show(row["ID"].ToString());
_}
_ else
_return;
_