首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >忽略最后一个单元格的GridView行OnClick

忽略最后一个单元格的GridView行OnClick
EN

Stack Overflow用户
提问于 2014-05-27 09:41:08
回答 2查看 647关注 0票数 1

我有一个有几列的GridView。当您单击行上的任意位置时,将出现带有命令的PostBack,但最后一列除外,它是一个删除按钮,它有自己的与之关联的命令。我可以使用以下命令来实现这一点

代码语言:javascript
复制
protected override void Render(HtmlTextWriter writer)
    {
        foreach (GridViewRow r in CourtGrid.Rows)
        {
            if (r.RowType == DataControlRowType.DataRow)
            {
                //Clicking any cell will open the details page, except for the last cell, which is Delete
                for (int i = 0; i < r.Cells.Count - 1; ++i)
                {
                    r.Cells[i].Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);
                }

                //Much lighter page produced
                //r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);
            }
        }

        base.Render(writer);
    }

但是这会给页面添加很多额外的数据。源文件中有一列显示为

代码语言:javascript
复制
<tr>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">ADAIM</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Ada</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Municipal</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Ada</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">County</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">Ada</td>
<td onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">ID</td>
</tr>

但是如果你再看看我的代码,你会发现有一行被注释掉了

代码语言:javascript
复制
r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(CourtGrid, "Edit$" + r.RowIndex, true);

如果我使用这段代码,我得到的行数要少得多

代码语言:javascript
复制
<tr onclick="javascript:__doPostBack(&#39;ctl00$ctl00$MainContent$PageContent$CourtGrid&#39;,&#39;Edit$0&#39;)">
<td>ADAIM</td>
<td>Ada</td>
<td>Municipal</td>
<td>Ada</td>
<td>County</td>
<td>Ada</td>
<td>ID</td>
</tr>

但是,当单击Delete按钮时,我同时获得了Delete和Edit命令,这是我不想要的。有没有办法让我在忽略最后一个单元格的同时获得完整行实现的轻量级结果?

EN

回答 2

Stack Overflow用户

发布于 2014-05-27 10:19:05

这是正常的行为。发生的情况是,最后一个单元格在行内,单元格单击首先发生,然后行单击事件发生。我猜你可以利用这个事件冒泡行为来停止点击事件的传播。因此,当单元格单击发生时,您应该停止单击事件的传播。例如,

代码语言:javascript
复制
element.onclick = function(e){
    e.stopPropagation();
};

这个JSFiddler Example用一个普通的html表来演示它。所以,我猜这只是一个修改单击事件处理程序来触发回发和停止事件传播的问题,一些类似于……

代码语言:javascript
复制
r.Attributes["onclick"] = string.Format(@"function(e){{
                   __doPostBack(&#{0};{1}&#{0};,&#{0};Edit$0&#{0};);                                     
                                   e.stopPropagation();

                           }}", r.RowIndex, CourtGrid.UniqueID);

请注意,我没有对此进行测试,所以不要做任何假设,但它应该会让您了解如何实现相同的目标。希望这是有意义的

票数 1
EN

Stack Overflow用户

发布于 2018-09-19 06:31:01

尝试使用:

代码语言:javascript
复制
OnClientClick="javascript:event.stopPropagation()"

在"aspx“页面上的delete按钮的定义中(即在GridView行的内部)。然后,您可以使用"OnClick“属性作为默认行为:

代码语言:javascript
复制
OnClick="btnDelete_Click"

其中"btnDelete_Click“应在代码后台(aspx.cs)中定义,例如:

代码语言:javascript
复制
protected void btnDelete_Click(object sender, EventArgs e)
{
    // Performs the related delete actions...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23879881

复制
相关文章

相似问题

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