无法从gridview linkbutton调用事件

时间:2012-02-06 04:40:05

标签: c# asp.net

基本上我希望通过按钮点击设置会话文件,但我没有这样做

我无法调用abcde函数(),不知道要设置什么,我确实尝试过onRowCommand,onDataBound,OnDataBinding

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">

gridview上的我的链接按钮

<asp:LinkButton ID="lnkname" runat="server" Text='<%#Eval("movieTitle") %>' Width=500 CommandName="cmdLink">

为了找到链接按钮控件,我确实尝试过DataGridItemEventArgs,但它也不起作用

 protected void abcde(object sender, GridViewCommandEventArgs e)
    {
  if (e.CommandName == "cmdLink")
        {

             string path = //some path;

            Session["path"] = path;

((LinkButton)e.Item.FindControl("lnkname")).PostBackUrl = "~/somewhere/ + Session["path"].ToString()";

        }
    }

我这样做是因为我的下一页功能取决于会话

3 个答案:

答案 0 :(得分:1)

我使用gridview RowCommand aspx代码段

<asp:TemplateField>
    <ItemTemplate>
         <asp:LinkButton ID="btnLink" runat="server" CommandName="btnLinkClick" 
                 CommandArgument='<%# Bind("roll") %>'  Text="Find Name"></asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

代码段背后的代码

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "btnLinkClick")
        {
            string path = //some path;
            Session["path"] = path;

            var button = e.CommandSource as LinkButton;
            button.PostBackUrl = path;
        }
    }

这里有一个有趣的事情是,如果你设置了一个postbackurl,那么第二次你没有到达服务器端它会转到你的给定网址

如果您只想设置网址,则可以轻松创建属性url,然后通过button.PostBackUrl绑定它。如果您需要客户端的某些值,请设置eventagument

答案 1 :(得分:0)

您需要在likbutton声明中设置CommandArgument,以便您可以将其用于绑定。 GridViewRowcommandEvents

protected void abcde(object sender, GridViewCommandEventArgs e)
    {
      if (e.CommandName == "cmdLink")
        {
        string path = //some path;
        Session["path"] = path;
        LinkButton objButton = (LinkButton)e.Item.FindControl("lnkname"); //this is you are missing 
        objButton.PostBackUrl = "~/somewhere/" + Session["path"].ToString()";
        }
    }

答案 2 :(得分:0)

好的,我不完全确定你的意思,但是如果你问如何在数据绑定中操作网格中的控件,它会是这样的:

    protected void grdvResults_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.DataItem != null)
        {
           ((LinkButton)e.Row.FindControl("lnkname")).PostBackUrl = "~/somewhere/" + Session["path"].ToString();
        }
    }