通过传递列名和行名

时间:2017-10-11 19:35:59

标签: c# datagridview

我有下面的DataGridView,我需要根据一些文件的收据检查单元格,我正在寻找最好的方法来做到这一点,我认为可以通过名称在单元格中插入一个值列的行和行的名称

enter image description here

职位是

enter image description here

如果我想标记位置0,0我会寻找 31 - SEGUROS (列名称)和 01 (行名称)然后它将被标记为单元格0,0

有可能吗?

2 个答案:

答案 0 :(得分:0)

DataGridView有一个CurrentCell属性,包含RowIndex和ColumnIndex。

还有CellEnter事件,其中DataGridViewCellEventArgs包含RowIndex和ColumnIndex。

Rows和Columns属性具有重载以接受索引或名称。但是,列名称和列标题之间存在差异。在您的情况下" 31 - SEGUROS "是列的标题,而不是它的名称。每个Column对象都有一个HeaderText属性。

如果未选择列或行,则其索引将为-1。

答案 1 :(得分:0)

您在寻找行和列索引吗?我读了三次你的问题,看起来仍然像......

VB.NET:

    Dim MyVal = 1234
    Dim ColIdx = 5
    Dim RowIdx = 10
    Me.DataGridView1.Rows(RowIdx).Cells(ColIdx).Value = MyVal

C#:

    Dynamic MyVal = 1234;
    Dynamic ColIdx = 5;
    Dynamic RowIdx = 10;
    this.DataGridView1.Rows(RowIdx).Cells(ColIdx).Value = MyVal;

您还可以按名称来处理行和单元格,只需将其名称放在双引号中即可。

要按列名称获取列索引(不是标题中的文本):

VB.NET:

Private Function GetColIdx(MyStringName As String)
    Dim ColIdx As Int16
    For ic = 0 To Me.DataGridView1.Columns.Count - 1
        Dim dc As DataGridViewColumn = Me.DataGridView1.Rows(ic)
        If dc.Name = MyStringName Then
            ColIdx = ic
            Exit For
        End If
    Next
    Return ColIdx
End Function

C#:

Private Object GetColIdx(String MyStringName)
{
    Int16 ColIdx = default(Int16);
    For (ic = 0; ic <= this.DataGridView1.Columns.Count - 1; ic++) {
        DataGridViewColumn dc = this.DataGridView1.Rows(ic);
        If (dc.Name == MyStringName) {
            ColIdx = ic;
            break; 
        }
    }
    Return ColIdx;
}

要获取列索引,您只需使用列的名称调用(C#)函数:

GetColIdx("SEGUROS")

类似的功能可以逐行获取。虽然使用行名称非常罕见,但这是可能的。它也可以修改为匹配标题中的文本,但名称更安全。