【问题标题】:Get text of ASP.NET HyperLinkField in GridView在 GridView 中获取 ASP.NET HyperLinkField 的文本
【发布时间】:2011-03-03 04:48:50
【问题描述】:

我试图在 GridView 的 OnRowDelete 事件中获取 HyperLinkField 的文本(HyperLinkField 的文本是我希望删除的行的主键)。我了解您无法使用我在下面放置的代码获取文本;它仅适用于 BoundFields(对于 HyperLinkFields,字符串为“”)。但是,我一直无法找到获取此文本的有效答案。如何从 HyperLinkField 中获取显示的文本? (带有 ASP.NET 4.0 和 C# 的 VS2010)

感谢阅读!

GridView 设计

        <asp:GridView ID="teamGridView" runat="server" CssClass="gridView" RowStyle-CssClass="rowStyle"
        AlternatingRowStyle-CssClass="altRowStyle" HeaderStyle-CssClass="viewsHeader"
        OnRowEditing="Team_OnRowEditing" OnRowDeleting="Team_OnRowDeleting" OnRowUpdating="Team_OnRowUpdating"
        OnRowCancelingEdit="Team_OnRowCancelingEdit">
        <Columns>
            <asp:HyperLinkField HeaderText="Team Name" DataTextField="Team Name" DataNavigateUrlFields="Team Name"
                DataNavigateUrlFormatString="Teams.aspx?Team_Name={0}" />
            <asp:BoundField HeaderText="Team Captain" DataField="Team Captains" />
            <asp:CommandField Visible="false" HeaderText="Commands" ShowEditButton="true" ShowDeleteButton="true" />
        </Columns>
    </asp:GridView>

GridView 填充代码

    using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["***"].ConnectionString))
        {
            // Initialize GridView and data
            teamGridView.AutoGenerateColumns = false;
            if (Convert.ToInt32(Session["UserLevel"]) > 0)
            {

                teamGridView.Columns[2].Visible = true;
            }
            SqlDataAdapter teamDataAdapter = new SqlDataAdapter();
            DataSet teamDataSet = new DataSet();
            if (Request["Team_Name"] == null)
            {
                // Show the list of teams if no specific team is requested
                teamDataAdapter.SelectCommand = new SqlCommand("[Team Select]", connection);
                teamDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
                teamDataAdapter.Fill(teamDataSet);
                teamGridView.DataSource = teamDataSet;
                teamGridView.DataBind();
            }
}

GridView OnRowDeleting 代码

        using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["***"].ConnectionString))
    {
        SqlCommand teamDeleteCommand = new SqlCommand("[Team Delete]", connection);
        teamDeleteCommand.CommandType = CommandType.StoredProcedure;
        teamDeleteCommand.Parameters.Add("TeamName", SqlDbType.NVarChar, 50);
        teamDeleteCommand.Parameters[0].Value = teamGridView.Rows[e.RowIndex].Cells[0].Text;
        Response.Write(teamDeleteCommand.Parameters[0].Value);
        try
        {
            connection.Open();
            teamDeleteCommand.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            throw new Exception("Team Deletion Error");
        }
    }

【问题讨论】:

  • 感谢 MVC 团队将我从这个特殊的地狱品牌中拯救出来。
  • 文本是否已经绑定到超链接字段
  • @Dorababu 是的。我用 Cells[1](一个 BoundField)尝试了这个,得到了我期望的字符串。这是 HyperLinkFields 的一个记录问题,但我无法在我的网络和 MSDN 搜索中找到任何解决方案。
  • 你是把它当作绑定字段还是模板字段
  • 我不清楚你在问什么。该字段是 ASP.NET 中内置的 HyperLinkField。

标签: c# asp.net


【解决方案1】:

代替

teamGridView.Rows[e.RowIndex].Cells[0].Text;

试试

( (HyperLink) teamGridView.Rows[e.RowIndex].Cells[0].Controls[0] ).Text

只是无法避免建议您更改将所有 SQL 直接放入页面的方式,就像这样。尝试倾向于 N 层开发。 MSDN 和 asp.NET 网站和 channel9.msdn 都有很好的视频可供参考。另外,http://weblogs.asp.net/scottgu

http://gurustop.net

【讨论】:

  • DirectCast(teamGridView.Rows(e.RowIndex).Cells(0).Controls(0), HyperLink).Text - 适用于 VB.NET 用户
  • 这怎么可能是正确的?根据 MSDN 文档,HyperLinkField 不是控件(尽管位于 WebControls 命名空间中)——它派生自 DataControlField,而后者又直接派生自 System.Object。
  • 这里我们不处理超链接字段。我们正在处理超链接字段添加到给定单元格的超链接。它适用于原始海报:)
【解决方案2】:
((HyperLink)teamGridView.Rows[e.RowIndex].Cells[0].Controls[0] ).Text 

将给出字段的文本或显示值。或者我们可以试试

((HyperLink)teamGridView.Rows[e.RowIndex].Cells[0].Controls[0] ).NavigateUrl

用于获取目标链接。

【讨论】:

    【解决方案3】:

    获取超链接文本值的另一种替代方法:

    Server.HtmlDecode((teamGridView.Rows[e.RowIndex].Cells[0].Controls[0] as HyperLink).Text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2012-03-19
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      相关资源
      最近更新 更多