0

我试图在单击按钮时删除 Gridview 行。我想将单击的行的 id 保存到变量中。并在超链接中使用此变量。

这是我的 RowDataBound 代码

  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes.Add("onmouseover", "this.style.cursor='Pointer';this.style.backgroundColor='Yellow'");
       e.Row.RowIndex.ToString())); 

        string id = DataBinder.Eval(e.Row.DataItem, "ProductionOrderId").ToString();
    // somthing like
    // return id ;

    }
}

这里是我需要所选行的 id 的超链接

<asp:HyperLink  runat="server" NavigateUrl="~/Producter/Delete?id= id" ID="HyperLink1"> Delete</asp:HyperLink>
4

3 回答 3

1

首先:在母版页的 head 部分添加对 jQuery 的引用

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

其次:将 ProductionOrderId 作为属性添加到数据行(如下所示),这样就可以在客户端通过 jQuery 访问它

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes.Add("onmouseover", "this.style.cursor='Pointer';this.style.backgroundColor='Yellow'");
                e.Row.RowIndex.ToString();
                string id = DataBinder.Eval(e.Row.DataItem, "ProductionOrderId").ToString();
                //save ProductionOrderId as datarow attribute
                e.Row.Attributes.Add("rowid", id);
            }
}

第三:

在 .aspx 文件的正文中添加以下脚本标记。每次单击一行时,它都会使用要删除的行的 ID 修改您的“删除”链接。为了清楚和完整起见,我还包含了您的链接。

<a href='<%=ResolveUrl("~/Producter/Delete?id=" ) %>' ID="HyperLink1">Delete</a>

 <script language="javascript">
    //every time a row is clicked this script will perform the following actions:
        $("tr").click(function () {
            var clicked = $(this);
            //get the row id from the currently cliked row
            var rowid = clicked.attr("rowid");
            //get the value of href attribute from the link with id 'HyperLink1'
            var link = $("#HyperLink1").attr("href");
            //remove any previously appended values
            var linkTokens = link.split("=");
            linkTokens[1] = "";
            link = linkTokens.join("=");
            //append the current row id to the link
            link = link + rowid;
            //set the href attribute of your link to the new value
            $("#HyperLink1").attr("href", link);
        });
    </script>

如果您需要进一步的帮助,请随时告诉我。

免责声明:通常最好使用 cdn 来传递 js 文件,因为它们很可能已经被用户浏览器缓存了。

根据要求,这里是将 jquery library 2.0 放入您的内容文件夹的方法:

  1. 备份您的工作解决方案。
  2. 用鼠标右键单击 此链接并选择另存为。
  3. 将其保存到磁盘上的内容文件夹中。
  4. 从 Visual Studio 中选择“添加现有项目”
  5. 浏览到您的内容文件夹
  6. 选择您的 jquery 文件
  7. 单击添加。
  8. 现在将您的 jquery 文件拖到页面的标题部分。
  9. 删除旧标签(链接到 ajax.googleapis.com)
于 2013-04-25T13:35:14.500 回答
1

修改了 RowDataBound 以将 GridView 记录 ID 保存到客户端:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes.Add("onmouseover", "this.style.cursor='Pointer';this.style.backgroundColor='Yellow'");
       e.Row.RowIndex.ToString())); 

        string id = DataBinder.Eval(e.Row.DataItem, "ProductionOrderId").ToString();

        // store the id at the client side
        e.Row.Attributes.Add("id", id);
    }
}

在您的 javascript 代码中(使用 jQuery):每当单击 GridView 记录时,这将更改超链接 href 值。

<script type="text/javascript">
  $('#<%=GridView1.ClientID %> tr[id]').click(function () {
      idToDelete = $('#<%=GridView1.ClientID %> tr[id]').val();
      $("a.HyperLink1").attr("href", "~/Producter/Delete?id=" + idToDelete);
  });
</script>

虽然我没有测试过代码,但我希望它应该按要求工作。

编辑: 您还应该在 head 部分添加对 jQuery.js 文件的引用,如下所示:

<script src="js/jquery-1.6.1.min.js" type="text/javascript"></script>
于 2013-04-25T14:13:13.693 回答
0

一种更简单的方法是创建一个辅助方法:

string getLink(MyObject obj)
{
   return "~/Producter/Delete?id" + obj.ID;
}

在视图中:

<asp:HyperLink  runat="server" NavigateUrl="<%# getLink(Container.DataItem) %>" ID="HyperLink1"> Delete</asp:HyperLink>
于 2013-04-25T13:33:19.503 回答