c# - 使用动态生成的控件将数据绑定到 gridview 绑定到 sql 数据库
问题描述
我有一个带有标签、Radiobuttonlist 和 Nested Gridview 的 Gridview,它们是在绑定到数据库后动态生成的。嵌套的 gridview 具有也绑定到数据库的控件。我想在渲染后将数据绑定到这些控件。我无法弄清楚。请帮忙!!!要绑定的数据在 bindtopgridwithdata() 方法中。请帮忙!!!
//--------------------------------以下是aspx webform---------- --
<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--------
推荐阅读
- jquery - Setting ajax data from data attribute
- r - R中的正态性检验
- r - 具有自回归的重复测量模型(SAS 和 R)
- python-3.x - Pandas:用数据填充随机空行
- c++ - 由于某种原因,客户端未调用服务器 RPC
- javascript - 正则表达式匹配以点分隔的字符串,只能包含字母数字、连字符、下划线、点
- java - commons-lang3-3.6.jar 的 StringUtils 中的 equals() 和 equalsIgnoreCase() 有什么区别?
- java - 在 Jira 7.x 插件中使用外部依赖项
- youtube-api - YouTube v3 不再返回超过 100 条记录的分页结果
- ms-access - 数字字段溢出尝试将 Lotus123 Sheets 导入 MS Access