【问题标题】:Bind data to gridview with controls generated dynamically bound to sql database使用动态生成的控件将数据绑定到 gridview 绑定到 sql 数据库
【发布时间】:2018-11-16 00:29:11
【问题描述】:

我有一个带有标签的 Gridview、Radiobuttonlist 和 Nested 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();
}

【问题讨论】:

    标签: c# asp.net sql-server gridview


    【解决方案1】:

    没有人回复。伙计们,我自己找到了解决方案。这里是:

    这里是:

    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--------
    

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2015-10-21
      相关资源
      最近更新 更多