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
列?
尝试如下:
我已经改变了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;
}