Winforms 获取绑定到DataTable的DataGridView中单击的按钮的值
我将DataGridView绑定到DataTable。我添加了一个DataGridViewButtonColumn,作为行的删除按钮 由于它绑定到一个DataTable,我希望能够通过单击delete按钮获取行的对象,这样我就可以从DataTable中删除它,然后刷新DataGrid 以下是我的按钮的设置方式:Winforms 获取绑定到DataTable的DataGridView中单击的按钮的值,winforms,datagridview,datagridviewbuttoncolumn,Winforms,Datagridview,Datagridviewbuttoncolumn,我将DataGridView绑定到DataTable。我添加了一个DataGridViewButtonColumn,作为行的删除按钮 由于它绑定到一个DataTable,我希望能够通过单击delete按钮获取行的对象,这样我就可以从DataTable中删除它,然后刷新DataGrid 以下是我的按钮的设置方式: var colDelete = new DataGridViewButtonColumn(); colDelete.Name = "DeleteButton"
var colDelete = new DataGridViewButtonColumn();
colDelete.Name = "DeleteButton";
colDelete.HeaderText = "Delete";
colDelete.Text = "Delete";
colDelete.UseColumnTextForButtonValue = true;
colDelete.DataPropertyName = "EthnicityDetailID";
colDelete.DisplayIndex = 10;
dataGridEthnicityData.Columns.Add(colDelete);
以下是我计划如何处理按钮单击事件:
private void dataGridEthnicityData_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
var senderGrid = (DataGridView)sender;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
e.ColumnIndex == senderGrid.Columns["DeleteButton"].Index)
{
//ethnicityDataTable.Rows.RemoveAt(e.RowIndex);
dataGridEthnicityData.Refresh();
}
}
catch (Exception ex)
{
MessageBox.Show("Error deleting ethnicity data: " + ex.Message + " " + ex.StackTrace);
}
}
如何将EthnicityDetailID指定为按钮的值,以及如何在按钮作为对象单击时检索行,以便检索值并在数据表中相应地删除
谢谢。显然,您已将DataTable绑定到DataGridView的数据源。如果已将数据与数据的显示方式分开,则代码类似于:
BindingList<Ethnicity> DisplayedEthnicities
{
get => (BindingList<Ethnicity>) this.dataGridView1.DataSource,
set => this.dataGridView1.DataSource = value;
}
Ethnicity GetEthnicity(DataGridViewRow row)
{
return (Ethnicity)row.DataboundItem;
}
Ethnicity CurrentEthnicity => this.dataGridView1.CurrentCell?.OwnindRow as Ethnicity;
IEnumerable<Ethnicity> SelectedEthnicities => this.dataGridView1.SelectedRows
.Select(row => this.GetEthnicity(row));
使用以下命令获取绑定数据:
var data=(DataRowView)senderGrid.Rows[e.RowIndex].DataBoundItem代码>@RezaAghaei正是我要找的。非常感谢你的帮助!
void IEnumerable<Ethnicities> ToEthnicities(DataTable dataTable)
{
// TODO: convert the rows of the datatable into Ethnicities
}
DataTable CreateDataTable()
{
// TODO: fill the datatable with data from database? CSV file? Json?
}
void FillDataGridView()
{
var dataTable = this.CreateDataTable();
var ethnicities = this.ToEthnicities(dataTable);
this.DisplayedEthnicities = new BindingList<Enthnicity>(ethnicities.ToList());
}
void OnCellContent_Clicked(object sender, DataGridViewCellEventArgs e)
{
DataGridViewRow row = this.DataGridView1.Rows[e.RowIndex];
Ethnicity ethnicity = this.GetEthnicity(row);
ProcessEthnicity(ethnicity);
}