[英]Bind data to gridview with controls generated dynamically bound to sql database
我有一個帶有標簽的Radioview,Radiobuttonlist和Nested Gridview,它們是綁定到數據庫后動態生成的。 嵌套的gridview具有也綁定到數據庫的控件。 我想將數據綁定到這些控件后呈現。 我無法弄清楚。 請幫忙!!! 要綁定的數據在bindtopgridwithdata()方法中。 請幫忙!!!
// --------------------------------以下是aspx網絡表單---------- -
<asp:GridView ID="gvItems" Width="100%" runat="server"
AutoGenerateColumns="false" DataKeyNames="ItemID"
OnRowDataBound="OnRowDataBound" OnDataBinding="gvItems_DataBinding">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table style="width: 100%">
<tr>
<td style="text-align: left; width: 50%">
<asp:Label ID="Label1" runat="server"
Text='<%# Eval("ItemName") %>' style="font-weight: 700"></asp:Label>
</td>
<td style="text-align: left; width: 50%">
<asp:RadioButtonList ID="RdbGradeTop"
runat="server" RepeatDirection="Horizontal" SelectedValue='<%#
Eval("GradeID") %>'>
</asp:RadioButtonList>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: left; width:
100%">
<asp:Panel ID="pnlSubItem" runat="server">
<asp:GridView ID="gvSubItem"
runat="server" AutoGenerateColumns="false" DataKeyNames="SubItemID, ItemID"
OnRowCommand="gvOrders_RowCommand" OnRowDataBound="gvSubItem_RowDataBound">
<Columns>
<asp:BoundField
DataField="SubItemName" HeaderText="Sub Item Name" ItemStyle-Width="350px"
/>
<asp:TemplateField
HeaderText="Grade">
<ItemTemplate>
<asp:RadioButtonList
ID="RdbGrade" runat="server" RepeatDirection="Horizontal">
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
</td>
</tr>
<tr>
<td style="text-align:right !Important;">
<strong>Remarks: </strong>
</td>
<td style="text-align:left !Important;">
<asp:TextBox runat="server" ID="txtRemarks"
TextMode="MultiLine" Width="400px" Height="50px" Text='<%# Eval("Remarks")
%>' >
</asp:TextBox>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
// ------------------------------------------------ -----------------------------
// ----------以下是背后的aspx.cs代碼----------------------------
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bindgrid();
// bindtopgridwithdata();
}
}
protected void bindgrid()
{
ItemIDbind, Item_M.ItemName FROM ObservationItem INNER JOIN Item_M ON
ObservationItem.ItemID = Item_M.ItemID where Item_M.IsActive=1");
gvItems.DataSource = clsobj.getDataTable("Select ItemID,ItemName from
Item_M where IsActive=1");
gvItems.DataBind();
}
protected void bindtopgridwithdata()
{
DataTable dt = clsobj.getDataTable(@"SELECT ObsItemID, ObsID, ItemID,
GradeID, Remarks, IsActive FROM ObservationItem");
gvItems.DataSource = dt;
gvItems.DataBind();
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataTable dt1 = clsobj.getDataTable("select GradeID,Grade from
Grade_M where IsActive=1");
RadioButtonList rbGradeTop =
(RadioButtonList)e.Row.FindControl("RdbGradeTop");
rbGradeTop.DataSource = dt1;
rbGradeTop.DataTextField = "Grade";
rbGradeTop.DataValueField = "GradeID";
rbGradeTop.DataBind();
string ItemID = gvItems.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvSubItem = e.Row.FindControl("gvSubItem") as GridView;
DataTable dt = clsobj.getDataTable(string.Format("select
SubItemID,SubItemName,ItemID from SubItem_M where IsActive=1 and
ItemID='{0}'", ItemID));
gvSubItem.DataSource = dt;
gvSubItem.DataBind();
// bindtopgridwithdata();
if (dt.Rows.Count != 0)
{
}
}
}
protected void gvOrders_RowCommand(object sender, GridViewCommandEventArgs e)
{
}
protected void gvSubItem_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataTable dt = clsobj.getDataTable("select GradeID,Grade from Grade_M
where IsActive=1");
RadioButtonList rbGrade =
(RadioButtonList)e.Row.FindControl("RdbGrade");
rbGrade.DataSource = dt;
rbGrade.DataTextField = "Grade";
rbGrade.DataValueField = "GradeID";
rbGrade.DataBind();
}
}
protected void gvItems_DataBinding(object sender, EventArgs e)
{
// bindtopgridwithdata();
}
沒有任何人的答復。 伙計們,我自己找到了解決方案。 這里是:
這里是 :
protected void bindgrid()
{
// gvItems.DataSource = clsobj.getDataTable(@"SELECT
ObservationItem.ObsItemID, ObservationItem.ObsID, ObservationItem.ItemID,
ObservationItem.GradeID, ObservationItem.Remarks, ObservationItem.IsActive,
// Item_M.ItemID
AS ItemIDbind, Item_M.ItemName FROM ObservationItem INNER JOIN Item_M ON
ObservationItem.ItemID = Item_M.ItemID where Item_M.IsActive=1");
gvItems.DataSource = clsobj.getDataTable("Select ItemID,ItemName from
Item_M where IsActive=1");
gvItems.DataBind();
//--------------------For populating upper gridview with data---------
DataTable dt2 = clsobj.getDataTable(@"SELECT ObsItemID, ObsID, ItemID,
GradeID, Remarks, IsActive FROM ObservationItem where ObsID=1");
if (dt2.Rows.Count > 0)
{
for (int i = 0; i < dt2.Rows.Count; i++)
{
//string ItemID1 =
gvItems.DataKeys[i].Values["ItemID"].ToString();
RadioButtonList RDBTop =
(RadioButtonList)gvItems.Rows[i].Cells[0].FindControl("RdbGradeTop");
TextBox TxtRemarks =
(TextBox)gvItems.Rows[i].Cells[0].FindControl("txtRemarks");
RDBTop.SelectedValue = dt2.Rows[i]["GradeID"].ToString();
TxtRemarks.Text = dt2.Rows[i]["Remarks"].ToString();
}
}
//--------------------For populating upper gridview with data----------
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
DataTable dt1 = new DataTable(),dt=new DataTable();
if (e.Row.RowType == DataControlRowType.DataRow)
{
dt1 = clsobj.getDataTable("select GradeID,Grade from Grade_M where
IsActive=1");
RadioButtonList rbGradeTop =
(RadioButtonList)e.Row.FindControl("RdbGradeTop");
rbGradeTop.DataSource = dt1;
rbGradeTop.DataTextField = "Grade";
rbGradeTop.DataValueField = "GradeID";
rbGradeTop.DataBind();
string ItemID = gvItems.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvSubItem = e.Row.FindControl("gvSubItem") as GridView;
dt = clsobj.getDataTable(string.Format("select
SubItemID,SubItemName,ItemID from SubItem_M where IsActive=1 and
ItemID='{0}'", ItemID));
gvSubItem.DataSource = dt;
gvSubItem.DataBind();
// bindtopgridwithdata();
}
//----------For populating innergridview with data----------------------
//for (int k; k<dt.Rows.Count; k++)
//{
if ((e.Row.RowType == DataControlRowType.DataRow))
{
if (dt.Rows.Count != 0)
{
DataTable dt2 = clsobj.getDataTable(@"SELECT
ObservationSubItem.ObsSubItemID, ObservationSubItem.ObsItemID,
ObservationSubItem.SubItemID, ObservationSubItem.GradeID
FROM ObservationSubItem
INNER JOIN
ObservationItem ON
ObservationSubItem.ObsItemID = ObservationItem.ObsItemID where
ObservationItem.ObsID=1");
if (dt2.Rows.Count > 0)
{
for (int i = 0; i < dt2.Rows.Count; i++)
{
DataTable dt3 = clsobj.getDataTable(@"SELECT
ObservationSubItem.ObsSubItemID, ObservationSubItem.ObsItemID,
ObservationSubItem.SubItemID, ObservationSubItem.GradeID
FROM ObservationSubItem
INNER JOIN
ObservationItem ON
ObservationSubItem.ObsItemID = ObservationItem.ObsItemID where
ObservationItem.ObsID=1 and ObservationSubItem.ObsItemID=" + i);
// GridView GrdvInner = e.Row.FindControl("gvSubItem") as
GridView;
// int m = 0;
if (e.Row.FindControl("gvSubItem") != null) //(i ==
Convert.ToInt16(dt2.Rows[i]["ObsItemID"].ToString()) &&
e.Row.RowIndex.Equals(i-1))//// To be chaecked
{
if (dt3.Rows.Count >0)
if (e.Row.RowIndex.Equals(Convert.ToInt16(dt3.Rows[0]
["ObsItemID"].ToString()) - 1))
{
GridView GrdvInner = e.Row.FindControl("gvSubItem")
as GridView;
//(GridView)gvItems.Rows[i].Cells[0].FindControl("gvSubItem"); ////-
--------- This line is not working---------------------------------
------------------------------------
for (int j = 0; j < dt3.Rows.Count; j++)
{
//, e.Row.FindControl("gvSubItem") as GridView;
RadioButtonList RDBGrade =
(RadioButtonList)GrdvInner.Rows[j].Cells[0].FindControl("RdbGrade");
RDBGrade.SelectedValue = dt3.Rows[j]
["GradeID"].ToString();
}
}
}
// m++;
}
}
}
}
//-------------------------or populating innergridview with data--------
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.