【发布时间】:2014-07-30 15:01:05
【问题描述】:
C#中获取datagridview列的索引有不同的方法,例如:
dataGridViewTextBoxColumn1.Index;
dataGridViewTextBoxColumn1.DisplayIndex;
datagridview1.Columns[column.name].Index;
datagridview1.Columns[column.name].DisplayIndex;
dataGridViewTextBoxColumn1 在 DataGridViewColumnsCollection 列表中。
设计师代码:
this.datagridview1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dataGridViewTextBoxColumn1,
this.dataGridViewTextBoxColumn2,
this.dataGridViewTextBoxColumn3
}
我体验了不同的方法,但在奇怪的情况下我获得了不同的值,例如我使用这个:
datagridview1.Columns[dataGridViewTextBoxColumn1.name].Index;
我得到了相对于列集合的真实索引,在我的测试中值为 3。
但如果我使用这个:
dataGridViewTextBoxColumn1.Index;
我得到一个不同的索引,在我的测试中值为 1。
我不明白,因为理论上是相同的属性,不是吗?,
在 displayindex 属性的情况下,结果是相似的。在我的 datagridview 中,我有不可见且只读的列。
在其他测试中,我得到了所有情况下的正确值,并且这个 datagridivew 包含更多可见和不可见的列。
我的问题是:如果我使用事件(例如 CellContentClick 来均衡 DataGridViewCellEventArgs.ColumnIndex),获取 DataGridView 中列的正确索引的最佳方法是什么?
示例:
private void datagridview1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex.Equals(datagridview1.Columns[dataGridViewTextBoxColumn1.Name].Index))
datagridview1.Rows[e.RowIndex].Cells[dataGridViewTextBoxColumn2.Index].Value = true;
}
更新
这是我的测试是一个视觉工作室手表:
测试 1:
private void dgvTerminales_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex.Equals(dgvTerminales.Columns[clmActiva.Name].Index))
dgvTerminales.Rows[e.RowIndex].Cells[clmEditado.Index].Value = true;
}
测试 2:
其他具有相同属性、列和表单的datagridview。
private void dgvSucursales_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex.Equals(dgvSucursales.Columns[clmActiva.Name].Index))
dgvSucursales.Rows[e.RowIndex].Cells[0].Value = true;
}
clmActiva 是 DataGridViewCheckBoxColumn 列类型。
【问题讨论】:
-
你需要显示你从哪里得到
column,那是一个数据表列吗? -
您是否对列进行排序会影响其列索引?
-
我需要将 e.ColumnIndex 与 DataGridView 中的特定列索引进行比较。
标签: c# datagridview