【问题标题】:GridView trying to select the whole row except the last column?GridView 试图选择除最后一列之外的整行?
【发布时间】:2020-01-31 10:05:07
【问题描述】:

我目前已将此功能附加到我的 gridview 中,我正在尝试获取它以避免我创建的 11 列。我是一个触发此功能的超链接,而不是转到超链接,提供任何帮助将不胜感激。


protected void GridView1_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(TakeGrid, "Select$" + e.Row.RowIndex);
    }
}

【问题讨论】:

  • 我认为更好的方法是从您的e.Row.DataItem 中识别一些字段/属性以确定是否隐藏。是一直排在第 11 排,还是这一次?
  • 我想避免第 11 列而不是行,我在第 11 列有一个超链接,当整行被绑定时我无法使用
  • 您是否要隐藏具有id=lnk<asp:HyperLink>
  • 不,我有一行数据,超链接需要指向不同的网站。我希望用户能够单击任何其他列并触发代码隐藏函数。超链接应始终可见

标签: c# gridview webforms


【解决方案1】:

只要您在 gridview 中创建新行,并且如果您想特别避免第 11 行,那么只需使用带有 rowindex 属性的 and 条件即可触发此事件。

    protected void GridView1_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {
      if (e.Row.RowType == DataControlRowType.DataRow)
      {
        e.Row.Attributes["onclick"] = 
        Page.ClientScript.GetPostBackClientHyperlink(TakeGrid, "Select$" + e.Row.RowIndex);
       e.Row.Cells[11].Attributes.Remove("onclick");
      }
    }

【讨论】:

  • 我试图避开第 11 列。我想绑定数据以从每一行获取单独的 id。但是我不想绑定第 11 列,因为它是一个超链接,如果整行都绑定了,我无法单击它
  • 这仍然不允许我单击超链接。当我单击它时,它会触发下一个功能的超链接
【解决方案2】:

试试这个.....在 RowDataBound 事件中以 HyperLink 为目标。您使用了很多 BoundFields,这很好,但这是在绑定时为每个特定行定位控件的另一种方法。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink link = (HyperLink)e.Row.FindControl("lnk");

            if (link != null)
            {
                link.Visible = false;
            }
        }
    }

在您的前端,您需要将事件添加到 GridView....

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>

这里也是获取GridView的DataItem然后执行逻辑的另一个例子。我创建了一个示例 MyProduct 类,并想象我的 GridView 的 DataSource 是 Collection&lt;MyProduct&gt;()

    public partial class MyProduct
    {
        public string id { get; set; }
        public string name { get; set; }
        public string sku { get; set; }
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            MyProduct rowData = (MyProduct)e.Row.DataItem;

            if (rowData != null)
            {
                // only hide link if property for product meets our logic
                if (string.Equals(rowData.sku, "MySkuProduct", StringComparison.InvariantCultureIgnoreCase))
                {

                    HyperLink link = (HyperLink)e.Row.FindControl("lnk");

                    if (link != null)
                    {
                        link.Visible = false;
                    }
                }

            }

        }
    }

【讨论】:

  • 这不是我要问的。我想如果我解开第 11 列。我希望能够在不触发任何代码的情况下点击超链接,我不想隐藏它。
【解决方案3】:

大家好,我找到了问题的答案,并意识到我问错了问题。我没有留下第 11 列,而是将 onclick 应用到我希望它附加到的行上。例如

 protected void GridView1_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                for (int i = 0; i <= 10; i++)
                {
                    e.Row.Cells[i].Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(TakeGrid, "Select$" + e.Row.RowIndex);
                }
            }
        }

但感谢大家的帮助。这是我用来回答的另一个类似问题的链接。

Gridview row clickable except for first column?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2010-09-23
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多