Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 获取绑定到DataTable的DataGridView中单击的按钮的值_Winforms_Datagridview_Datagridviewbuttoncolumn - Fatal编程技术网

Winforms 获取绑定到DataTable的DataGridView中单击的按钮的值

Winforms 获取绑定到DataTable的DataGridView中单击的按钮的值,winforms,datagridview,datagridviewbuttoncolumn,Winforms,Datagridview,Datagridviewbuttoncolumn,我将DataGridView绑定到DataTable。我添加了一个DataGridViewButtonColumn,作为行的删除按钮 由于它绑定到一个DataTable,我希望能够通过单击delete按钮获取行的对象,这样我就可以从DataTable中删除它,然后刷新DataGrid 以下是我的按钮的设置方式: var colDelete = new DataGridViewButtonColumn(); colDelete.Name = "DeleteButton"

我将DataGridView绑定到DataTable。我添加了一个DataGridViewButtonColumn,作为行的删除按钮

由于它绑定到一个DataTable,我希望能够通过单击delete按钮获取行的对象,这样我就可以从DataTable中删除它,然后刷新DataGrid

以下是我的按钮的设置方式:

  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);
}