如何在RowDataBound函数中获取特定列的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在RowDataBound函数中获取特定列的值?相关的知识,希望对你有一定的参考价值。

我有一个下拉列表和一个gridview。根据下拉列表中选择的值,我想更新NaviagetURL以获取gridview第1列中指定的超链接。所以我使用onRowDataBound函数动态更新超链接的导航。并且,我试图检索第一列“ID”的值,以将其用作OnRowDataBound函数内的查询字符串,但我无法使其工作。

当我单击第一列中的超链接时,查询字符串没有为变量ID分配任何值。所以,网址刚解析为http://localhost/JobCosting/EditSavedTicket.aspx?ID=

预期的是,单击超链接时打开的URL应该具有在查询字符串中分配给变量ID的第1列中指定的值。如果我使用e.Row.Cells [1] .Text或e.Row.Cells [2] .Text,正在正确检索列值,但我需要第0列中未获取的值。当我检查字符串id的长度e.Row.Cells [0] .Text时,它为零

网格视图:

<asp:GridView ID="GridView2" runat="server" AllowSorting="True" 
 AutoGenerateColumns="False" DataSourceID="Saved_Work" OnRowDataBound="update_url" 
 Style="float: left; font-size: small; position: relative;
            width: 82%; position: relative; top: -10px; height: 40px; font-size: small; text-align: left;
            left: 30px;" align="left">
            <Columns>
                <asp:TemplateField HeaderText="ID">
                    <ItemTemplate>
                        <asp:HyperLink ID="Continue_SavedWork" runat="server" NavigateUrl='<%# Eval("ID", "~/EditSavedJob.aspx?ID={0}") %>'
                            Text='<%# Eval("ID") %>'></asp:HyperLink>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="UserID" HeaderText="User" SortExpression="UserID" />
                <asp:BoundField DataField="Date_Created" HeaderText="Last_Updated_On" SortExpression="Date_Created" />
            </Columns>
        </asp:GridView>

代码背后:

protected void update_url(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //string NavigateUrl="<%# Eval('ID', 'EditSavedTicket.aspx?ID={0}) %>";
        string id = e.Row.Cells[0].Text;
        HyperLink hp = (HyperLink)e.Row.FindControl("Continue_SavedWork");
        if (SavedWorkDD.SelectedValue.ToString() == "Tickets")
            hp.NavigateUrl = string.Format("EditSavedTicket.aspx?ID={0}", id);
    }
}
答案

我怀疑你无法访问第一列文本的原因是它是一个模板列,而其他列是BoundField列。

您可以在DataItem事件处理程序中访问OnRowUpdated,而不是从控件中检索文本。例如,如果您绑定到DataTable,则可以像这样访问DataRowView

protected void update_url(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    var row = (DataRowView)e.Row.DataItem;
    var id = (int)row["ID"];
    // ...
  }
}

这种方法比尝试查找控件和访问其值更加依赖。即使您更改UI,它也将继续有效。

以上是关于如何在RowDataBound函数中获取特定列的值?的主要内容,如果未能解决你的问题,请参考以下文章

GridView 中RowDataBound 获取绑定后的各个字段的值

页面载入时通过获取GridView某行某列的值来控制某一列的控件属性

使用 Python 读取 Excel 文件,如何获取具有指定列名的特定列的值?

如何对数据表中特定数据列的值求和

从 RowDataBound 事件的 gridview 从单元格中获取值

BigQuery:如何获取列中特定字段的值?