我在ASP.NET中有一个gridview,现在我想要单元格值by the column name,而不是按单元格索引.

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

推荐答案

GridView不作为列名,因为知道这些是datasource的属性.

如果您仍然需要知道给定列名的索引,那么可以创建一个helper方法来实现这一点,因为gridview头通常包含此信息.

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;
}

记住上面的代码将使用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;
    }
}

我强烈建议您使用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>

然后使用

string columnValue = ((Label)e.Row.FindControl("lblName")).Text;

Asp.net相关问答推荐

无法在Microsoft Windows Server 2016(数据中心)上运行.NET可移植性分析器

我可以强制刷新我的样式表文件吗?

EntityFramework 通过 ID 获取对象?

是否可以使用 Membership API 更改用户名

如何从 URI 中删除 PROTOCOL

在使用网络服务器加载它们之前,如何编译 Asp.Net Aspx 页面?

如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?

如何将 css 类添加到 ASP.Net 中的更新面板?

ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()

无法确定条件表达式的类型,因为 'string' 和 'System.DBNull' 之间没有隐式转换

如何以编程方式将标签的前景色设置为其默认值?

在 asp.net 中将 JSON 转换为 .Net 对象时出错

修改 web.config 时如何防止 ASP.NET 应用程序重新启动?

.NET - c# - 需要跨分区查询,但在 DocumentDB 数据访问上禁用了问题

如何将数据集转换为数据表

头标记中的内联代码 - ASP.NET

字体真棒里面asp按钮

如何从 ASP.NET Identity 获取用户列表?

如何清除 System.Runtime.Caching.MemoryCache

如何修复 ASP.NET 错误文件 'nnn.aspx' 尚未预编译,无法请求.?