如何在asp.net的GridView中按列名获取单元格值而不是索引

Var*_*d.M 42 asp.net gridview

gridview在asp.net中有一个,现在我希望列名称的单元格值,而不是单元格索引.

如何通过单元格列名检索单元格值

bal*_*dre 67

GridView不作为列名称,因为datasource知道那些东西的属性.

如果您仍然需要知道给定列名的索引,那么您可以创建一个帮助方法来执行此操作,因为gridviewHeader通常包含此信息.

int GetColumnIndexByName(GridViewRow row, string columnName)
{
    int columnIndex = 0;
    foreach (DataControlFieldCell cell in row.Cells)
    {
        if (cell.ContainingField is BoundField)
            if (((BoundField)cell.ContainingField).DataField.Equals(columnName))
                break;
        columnIndex++; // keep adding 1 while we don't have the correct name
    }
    return columnIndex;
}
Run Code Online (Sandbox Code Playgroud)

请记住,上面的代码将使用BoundField...然后使用它像:

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int index = GetColumnIndexByName(e.Row, "myDataField");
        string columnValue = e.Row.Cells[index].Text;
    }
}
Run Code Online (Sandbox Code Playgroud)

我强烈建议您使用它TemplateField来拥有自己的控件,然后更容易获取这些控件,如:

<asp:GridView ID="gv" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

然后使用

string columnValue = ((Label)e.Row.FindControl("lblName")).Text;
Run Code Online (Sandbox Code Playgroud)