Datagridview复选框列作为单选按钮用于单选行

本文关键字:单选按钮 用于 单选行 复选框 Datagridview | 更新日期: 2023-09-27 18:02:47

我在DataGridView中有大约1000行。想要实现一个CheckBox列,让用户选择单行。当前的实现在初始选择期间很慢。循环导致问题:

dataGridView_1_CellContentClick(object sender, DataGridViewCellEventArgs e)
   dataGridView_1.CommitEdit(DataGridViewDataErrorContexts.Commit);

private void dataGridView_1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
  if (e.ColumnIndex == dataGridView_1.Columns["Selected"].Index)
    if (Convert.ToInt16(dataGridView_1.Rows[e.RowIndex].Cells[0].Value) == 1)
    {
        foreach (DataGridViewRow DR in dataGridView_PrimeMover.Rows)
        {
            if (DR.Index != e.RowIndex)
            {
               DR.Cells[0].Value = 0;
            }
        }
    ......
    ......
   }
}

如何在DataGridView中实现一个可以处理大数据的RadioButton列?

Datagridview复选框列作为单选按钮用于单选行

尝试如下:

我已经改变了foreach循环中的if大小写,你不需要为每一行赋值,看看它是否更快

if (e.ColumnIndex == dataGridView_1.Columns["Selected"].Index)
    if (Convert.ToInt16(dataGridView_1.Rows[e.RowIndex].Cells[0].Value) == 1)
    {
        foreach (DataGridViewRow DR in dataGridView_PrimeMover.Rows)
        {
            if((int)DR.Columns["Selected"] == 1 && DR.Index != e.RowIndex)
                DR.Columns["Selected"] = 0;
        }
   }

这么多DataGridView的事件知道我,但我不知道他们,希望这有助于。

    int SelectedRowIndex;
    private void InitDGVData()
    {
        DataTable dt = new DataTable();
        DataColumn dc = new DataColumn();
        DataColumn dc1 = new DataColumn();
        dt.Columns.Add(dc);
        dt.Columns.Add(dc1);
        for (int i = 0; i < 10000; i++)
        {
            dt.Rows.Add(i.ToString(), i.ToString());
        }
        dataGridView1.DataSource = dt;
        DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn();
        col.Name = "Selected";
        dataGridView1.Columns.Add(col);
        SelectedRowIndex = dataGridView1.CurrentRow.Index;
        dataGridView1.Rows[SelectedRowIndex].Cells[dataGridView1.Columns["Selected"].Index].Value = true;
    }
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == dataGridView1.Columns["Selected"].Index && e.RowIndex != SelectedRowIndex)
        {
            dataGridView1.Rows[SelectedRowIndex].Cells[dataGridView1.Columns["Selected"].Index].Value = false;
            SelectedRowIndex = e.RowIndex;
        }
    }
    private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        dataGridView1.Rows[SelectedRowIndex].Cells[dataGridView1.Columns["Selected"].Index].Value = true;
    }
    private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        if (e.ColumnIndex == dataGridView1.Columns["Selected"].Index && e.RowIndex == SelectedRowIndex)
        e.Cancel = true;
    }