如何在pageindexchangeing事件中获取命令参数以进行数据绑定

时间:2016-07-01 05:18:31

标签: c#

1.这是我的HTML代码:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></asp:ToolkitScriptManager>
            <asp:GridView ID="reqparentgird" CssClass="prntgrd" runat="server" AutoGenerateColumns="False" OnRowCommand="reqparentgird_RowCommand" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Vertical" AllowPaging="True" OnPageIndexChanging="reqparentgird_PageIndexChanging">
                <AlternatingRowStyle BackColor="#DAEBBA" />
                <Columns>
                    <asp:TemplateField HeaderStyle-CssClass="grdhead" HeaderText="mainheader">
                        <ItemTemplate>
                            <div class="namedatediv">
                                <asp:Label ID="namelbl" CssClass="grdnamelbl" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                                <br />
                                <asp:Label ID="datelbl" CssClass="grddatelbl" runat="server" Text='<%# Eval("Date") %>'></asp:Label>
                            </div>
                            <div class="grdmsgdiv">
                                <asp:Label ID="msglbl" CssClass="grdmsg" runat="server" Text='<%# Eval("ReqInfo") %>'></asp:Label>
                                <br />
                                <br />
                                <asp:Label ID="Label1" CssClass="grddatelbl" runat="server" Text="Address:"></asp:Label>
                                <br />
                                <asp:Label ID="addrlbl" CssClass="grdmsg" runat="server" Text='<%# Eval("reqaddress") %>'></asp:Label>
                            </div>
                            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                                <ContentTemplate>
                                    <div class="errdiv">
                                        <asp:Label ID="errorlbl" CssClass="errlbl" runat="server" Text=""></asp:Label>
                                    </div>
                                    <div class="grdtxtdiv">
                                        <asp:TextBox ID="reqconvrstxt" CssClass="gridtxt" runat="server" TextMode="MultiLine" Columns="26" Rows="4"></asp:TextBox>
                                        <asp:TextBoxWatermarkExtender ID="msgconttxt_TextBoxWatermarkExtender" runat="server" Enabled="True" TargetControlID="reqconvrstxt" WatermarkText="Write your opinion here..">
                                        </asp:TextBoxWatermarkExtender>
                                    </div>
                                    <div class="grdsndbtndiv">
                                        <asp:Button ID="grdsubbtn" CssClass="grdinsrtbtn" runat="server" Text="Submit" CommandArgument='<%# Eval("ReqConversId") %>' CommandName="reqbooksget" />
                                    </div>
                                </ContentTemplate>
                            </asp:UpdatePanel>
                            <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
                                <ContentTemplate>
                                    <div class="inrgrdopenbtndiv">
                                        <asp:Button ID="grdconvrsbtn" CssClass="grdopnconvrbtn" runat="server" Text="Open all conversions" CommandArgument='<%# Eval("ReqConversId") %>' CommandName="reqconversget" />
                                    </div>
                                    <div class="inrgrddiv">
                                        <asp:GridView ID="reqchildgrd" CssClass="inrgrd" runat="server" Visible="false" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="None" AllowPaging="True" OnPageIndexChanging="reqchildgrd_PageIndexChanging1">
                                            <AlternatingRowStyle BackColor="#E4FFCA" />
                                            <Columns>
                                                <asp:TemplateField HeaderStyle-CssClass="inrgrdhead" HeaderText="User's comments.. of above book betails">
                                                    <ItemTemplate>
                                                        <div class="namedatediv">
                                                            <asp:Label ID="inrlbl1" CssClass="grdnamelbl" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                                                            <br />
                                                            <asp:Label ID="inrlbl2" CssClass="grddatelbl" runat="server" Text='<%# Eval("Date", "{0:M-dd-yyyy}") %>'></asp:Label>
                                                        </div>
                                                        <div class="grdmsgdiv">
                                                            <asp:Label ID="inrlbl3" CssClass="grdmsg" runat="server" Text='<%# Eval("ConvrsMessage") %>'></asp:Label>
                                                        </div>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                            </Columns>
                                            <EmptyDataTemplate>
                                                <div class="emptytemp">
                                                    At present we don't have any result's from your request....
                                                </div>
                                            </EmptyDataTemplate>
                                            <RowStyle BackColor="#FFCEFF" />
                                        </asp:GridView>
                                        <br />
                                    </div>
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </ItemTemplate>

                        <HeaderStyle CssClass="grdhead"></HeaderStyle>
                    </asp:TemplateField>
                </Columns>
                <EmptyDataTemplate>
                    <div class="emptytemp">
                        At present we don't have any result's from your request....
                    </div>
                </EmptyDataTemplate>
                <RowStyle BackColor="#FFFFC4" />
            </asp:GridView>

2.在pageload中绑定我的父网格视图:

    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    reqparentgird.DataSource = dataaccesslayer.getallreqedbks();
                    reqparentgird.DataBind();
                }
            }

3.然后我的父网格视图在执行insertcommand时会有rowcommand事件,并在按钮单击时绑定innergridview

    protected void reqparentgird_RowCommand(object sender, GridViewCommandEventArgs e)
        {
          if (e.CommandName == "reqbooksget")
        {
            string userid = Session["uid"].ToString();
            string username = Session["uname"].ToString();
            string reqconverid = e.CommandArgument.ToString();
            int rowindx = ((GridViewRow)((Button)e.CommandSource).NamingContainer).RowIndex;
            string reqbkmsg = ((TextBox)reqparentgird.Rows[rowindx].FindControl("reqconvrstxt")).Text;
            Label grderrlbl = (Label)reqparentgird.Rows[rowindx].FindControl("errorlbl");              
            dataaccesslayer reqconvrinsrtobj = new dataaccesslayer();
            reqconvrinsrtobj.reqbkconverinsrt(reqconverid, userid, username, reqbkmsg);
            grderrlbl.Text = "Your commant successfully placed....";

        }

        else if (e.CommandName == "reqconversget")
                {
                    string conversid = e.CommandArgument.ToString();
                    int rowindx =         ((GridViewRow)Button)e.CommandSource).NamingContainer).RowIndex;
                    GridView inrgrdview = (GridView)reqparentgird.Rows[rowindx].FindControl("reqchildgrd");

                        inrgrdview.DataSource = dataaccesslayer.getallreqconvermsg(conversid);
                        inrgrdview.DataBind();
                }
Binding innergridveiw by passing "conversid" as argument,converid value is assigned by command argument value i.e. `string conversid = e.CommandArgument.ToString();

4.这是我的getallreqconvermsg(conversid)方法:

public static List<getreqbkconvrs> getallreqconvermsg(string conversid)
        {
            List<getreqbkconvrs> convrsreqbk = new List<getreqbkconvrs>();
            string cs = ConfigurationManager.ConnectionStrings["mpdbcs"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(cs))
            {
                SqlCommand getreqbkconverscmd = new SqlCommand("getallreqconvers", conn);
                getreqbkconverscmd.CommandType = CommandType.StoredProcedure;
                getreqbkconverscmd.Parameters.AddWithValue("@conversid", conversid);
                conn.Open();
                SqlDataReader reqconves = getreqbkconverscmd.ExecuteReader();
                while (reqconves.Read())
                {
                    getreqbkconvrs reqbkconves = new getreqbkconvrs();
                    reqbkconves.Name = reqconves["Uname"].ToString();
                    reqbkconves.ConvrsMessage = reqconves["ConvrsMessage"].ToString();
                    reqbkconves.Date = Convert.ToDateTime(reqconves["Date"]);
                    convrsreqbk.Add(reqbkconves);
                }
                return convrsreqbk;
            }
        }

5.现在我在aspx.cs中为parentgidview添加了pagging,这样可以正常工作:

 protected void reqparentgird_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        reqparentgird.PageIndex = e.NewPageIndex;
        bindGridView();
    }
    private void bindGridView()
    {
        reqparentgird.DataSource = dataaccesslayer.getallreqedbks();
        reqparentgird.DataBind();
    }

6.现在我想添加pags到innergridveiw所以,我在这个事件中使用pageindexchangeing事件再次需要databind所以我想传递“conversid”作为数据绑定的参数,但是“conversid值来自命令参数”我的问题是如何在pageindexchanging事件中为具有单个参数的调用方法获取命令参数。

    protected void reqchildgrd_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                GridView childgrd = (sender as GridView);            
                childgrd.PageIndex = e.NewPageIndex;
                string conversid = e.CommandArgument.ToString();
         inrgrdview.DataSource = dataaccesslayer.getallreqconvermsg(conversid);
                inrgrdview.DataBind();
            }

7.这是我在pageindexchanging事件中向我的innergirdview添加pagging时出现的错误:

  'System.Web.UI.WebControls.GridViewPageEventArgs'does not contain a definition for 
'commandargument' and no extension method 'commandargument' accepting a first argument of type
'System.Web.UI.Webcontrols.GridViewPageEventArgs' could be found (are you missing a using directive or an assembly reference?) 

1 个答案:

答案 0 :(得分:0)

如果您想在多种方法中使用string conversid = e.CommandArgument.ToString();,则必须在班级中将conversid声明为变量。

示例:

     public class MyClass
      {

        private string lastConversid;

        ...

        else if (e.CommandName == "reqconversget")
                    {
                        this.lastConversid= e.CommandArgument.ToString();
        int rowindx = ((GridViewRow)Button)e.CommandSource).NamingContainer).RowIndex;
                        GridView inrgrdview = (GridView)reqparentgird.Rows[rowindx].FindControl("reqchildgrd");

        inrgrdview.DataSource = dataaccesslayer.getallreqconvermsg(this.lastConversid);
                            inrgrdview.DataBind();
                    }

        ....

      protected void reqchildgrd_PageIndexChanging(object sender, GridViewPageEventArgs e) {
        GridView childgrd = (sender as GridView);
        childgrd.PageIndex = e.NewPageIndex;

        inrgrdview.DataSource = dataaccesslayer.getallreqconvermsg(this.lastConversid);
        inrgrdview.DataBind();
      }

    }