簡體   English   中英

使用動態綁定到sql數據庫的控件將數據綁定到gridview

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM