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?)
答案 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();
}
}