首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >c#网格视图行单击

c#网格视图行单击
EN

Stack Overflow用户
提问于 2008-12-01 15:50:29
回答 9查看 72.9K关注 0票数 19

当我单击GridView中的一行时,我想使用从数据库中获得的ID转到另一个页面。

在我的RowCreated事件中,我有下面一行代码:

代码语言:javascript
复制
e.Row.Attributes.Add(
     "onClick",
     ClientScript.GetPostBackClientHyperlink(
          this.grdSearchResults, "Select$" + e.Row.RowIndex));

为了防止出现错误消息,我有以下代码:

代码语言:javascript
复制
protected override void Render(HtmlTextWriter writer)
{
    // .NET will refuse to accept "unknown" postbacks for security reasons. 
    // Because of this we have to register all possible callbacks
    // This must be done in Render, hence the override
    for (int i = 0; i < grdSearchResults.Rows.Count; i++)
    {
        Page.ClientScript.RegisterForEventValidation(
                new System.Web.UI.PostBackOptions(
                    grdSearchResults, "Select$" + i.ToString()));
    }
    // Do the standard rendering stuff
    base.Render(writer);
}

我如何给一行一个惟一的ID (来自数据库),当我单击该行时,另一个页面被打开(就像单击一个href),该页面可以读取该ID。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-12-01 18:01:32

我有解决方案。

这就是我所做的:

代码语言:javascript
复制
if(e.Row.RowType == DataControlRowType.DataRow)
{
    e.Row.Attributes["onClick"] = "location.href='view.aspx?id=" + DataBinder.Eval(e.Row.DataItem, "id") + "'";
}

我已经在RowDataBound事件中输入了前面的代码。

票数 19
EN

Stack Overflow用户

发布于 2010-04-06 10:33:23

马提金

下面是另一个示例,其中包含一些漂亮的行突出显示和一个href样式的游标:

代码语言:javascript
复制
protected void gvSearch_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#ceedfc'");
    e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=''");
    e.Row.Attributes.Add("style", "cursor:pointer;");
    e.Row.Attributes.Add("onclick", "location='patron_detail.aspx?id=" + e.Row.Cells[0].Text + "'");
  }
}

上面的代码可以在.NET 3.5下运行。但是,您不能将id列设置为Visible="false“,因为您的id键将获得一个空的查询字符串值:

代码语言:javascript
复制
<asp:GridView ID="gvSearch" runat="server" OnRowDataBound="gvSearch_RowDataBound" AutoGenerateColumns="false">
  <Columns>
    <asp:BoundField DataField="id" Visible="false" />
    <asp:BoundField DataField="first_name" HeaderText="First" />
    <asp:BoundField DataField="last_name" HeaderText="Last" />
    <asp:BoundField DataField="email" HeaderText="Email" />
    <asp:BoundField DataField="state_name" HeaderText="State" />
  </Columns>
</asp:GridView>

因此,请将第一列改为:

代码语言:javascript
复制
<asp:BoundField DataField="id" ItemStyle-CssClass="hide" />

将此css添加到页面顶部:

代码语言:javascript
复制
<head>
  <style type="text/css">
    .hide{
      display:none;
    }
  </style>
<head>

但是要隐藏标题行的第一个单元格,请在代码隐藏中将以下内容添加到gvSearch_RowDataBound()中:

代码语言:javascript
复制
if (e.Row.RowType == DataControlRowType.Header)
{
  e.Row.Cells[0].CssClass = "hide";
}

显然,您也可以在代码隐藏中隐藏id列,但这将导致您的标记中的文本比css类中的文本更多:

代码语言:javascript
复制
e.Row.Cells[0].Attributes.Add("style", "display:none;");
e.Row.Attributes.Add("style", "cursor:pointer;");

票数 20
EN

Stack Overflow用户

发布于 2009-02-13 17:12:18

代码语言:javascript
复制
protected void gvSearch_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string abc = ((GridView)sender).DataKeys[e.Row.RowIndex].Value.ToString();
        e.Row.Attributes["onClick"] = "location.href='Default.aspx?id=" + abc + "'";    
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/331231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档