2016-09-07 77 views
0

我有一個DropDownList,我想用DataBase中的列值填充。然而,當我嘗試在代碼中的DropDownList後面結合,將IDE不斷告訴我:GridView中的ASP.NET控件未找到存在於代碼後面

「‘EqpCatDDL’的名稱在當前環境中不存在」我不知道,因爲這是怎麼回事我通過其ID提到了控制權。以下是代碼:

ASPX:

<asp:GridView ID="Gridview1" runat="server" ShowFooter="true" 
       AutoGenerateColumns="false" 
       > 
       <Columns> 
        <asp:BoundField DataField="S/N" HeaderText="S/N" /> 
        <asp:TemplateField HeaderText="Item Name"> 
         <ItemTemplate> 
          <asp:DropDownList ID="EqpCatDDL" runat="server"></asp:DropDownList> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Description"> 
         <ItemTemplate> 
          <asp:DropDownList ID="DescripDDL" runat="server"> 
          </asp:DropDownList> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Quantity"> 
         <ItemTemplate> 
          <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Remarks"> 
         <ItemTemplate> 
          <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox> 
         </ItemTemplate> 
         <FooterStyle HorizontalAlign="Right" /> 
         <FooterTemplate> 
          <asp:Button ID="ButtonAdd" onclick="ButtonAdd_Click" runat="server" Text="Add New Row" /> 
         </FooterTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 

C#:

public void Populate1() 
{ 
    string connString = ConfigurationManager.ConnectionStrings["MyDbConn"].ConnectionString; 
    SqlConnection connection = new SqlConnection(connString); 

    SqlCommand cmd = new SqlCommand("SELECT EqpCateID, EqpCat FROM EqpCategory", connection); 
    cmd.Connection.Open(); 

    SqlDataReader ddlValues; 
    ddlValues = cmd.ExecuteReader(); 

    EqpCatDDL.DataSource = ddlValues; 
    EqpCatDDL.DataValueField = "EqpCateID"; 
    EqpCatDDL.DataTextField = "EqpCat"; 
    EqpCatDDL.DataBind(); 

    cmd.Connection.Close(); 
    cmd.Connection.Dispose(); 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    Populate1(); 
} 

IDE無法找到EqpCatDDL控制。

我現在用的是以下內容:Visual Studio 2010中,微軟SQL Server Management Studio中2008

我有一個Visual Studio網站

+0

您不能像上面那樣在GridView中綁定DropDownList。爲此,您需要一個循環來迭代並獲取它的索引值。 –

回答

1

您的下拉是gridview的工作,所以你可以用這個代碼嘗試

protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    var ddl = (DropDownList)e.Row.FindControl("EqpCatDDL'"); 
    SqlCommand cmd = new SqlCommand("SELECT EqpCateID, EqpCat FROM EqpCategory", connection); 

    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 

    EqpCatDDL.DataSource = ds; 
    EqpCatDDL.DataValueField = "EqpCateID"; 
    EqpCatDDL.DataTextField = "EqpCat"; 
    EqpCatDDL.DataBind(); 

} 
} 
+0

我會將數據庫訪問權限移動到Page_load,並具有全局變量來存儲數據集。這樣數據庫只被調用一次,而不是每個數據行一次。 –

+0

您可以爲包含您的結果的數據集創建全局方法,並且方法返回類型爲DataSet。所以你可以申請爲DDL.DataSource =你的metod名稱; –

+0

問題在於該方法,因此每一行都訪問數據庫。如果有1000行對999數據庫調用過多。 –

0

您不能直接填入這樣的GridView'sdropdownlist。您需要設置GridView第一即

GridView1.DataSource = DataSource 

的數據源,如果您想訪問此GridView控件的dropdownlist,您可以使用GridView

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //Checking whether the Row is Data Row 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //Finding the Dropdown control. 
     Control ctrl = e.Row.FindControl("EqpCatDDL"); 
     if (ctrl != null) 
     { 
      DropDownList dd = ctrl as DropDownList; 
      List lst = new List(); 
      dd.DataSource = lst; 
      dd.DataBind(); 
     } 
    } 
} 
2

使用此代碼RowDataBound事件處理程序綁定數據到dropdown而不使用RowDataBound

創建將數據綁定到dropdown如下,並調用它在Page_Load事件

Public void fill_gridView_dropDown() 
{ 
    // your connection and query to retrieve dropdown data will go here 
    // this loop will go through all row in GridView 
    foreach(GridViewRow row in your_gridView_Name.Rows) { 
     DropDownList dropDown = (DropDownList)row.FindControl("dropDownList_id"); 
     dropDown.DataSource = dataSource; 
     dropDown.DataValueField = "ValueField"; 
     dropDown.DataTextField = "TextField"; 
     dropDown.DataBind(); 
    } 
} 

請注意,您必須bind GridView的第一,然後你有你的下拉綁定功能

相關問題