2016-09-07 11 views
0

DataBaseの列値を設定するDropDownListがあります。GridViewのASP.NETコントロールがコードの背後に存在しないことが判明しました

を「名 『EqpCatDDL』は現在のコンテキスト内に存在しない」

を私は以来、何が起こっているかわからない:私は背後にあるコードでDropDownListコントロールをバインドしようとすると、しかし、IDEは私に言って続けて私は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には、Microsoft SQL Server Management Studioの2008

あなたは、このコードを試すことができますので、私は

+0

上記のようにGridViewにDropDownListをバインドすることはできません。そのためには、反復してインデックス値を取得するループが必要です。 –

答えて

1

あなたのドロップダウンがGridViewのであるVisual Studioのウェブサイトで働いています

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へのデータベースアクセスを移動し、データセットを格納するグローバル変数を持っています。そうすれば、データベースはデータ行ごとに1回ではなく、1回だけ呼び出されます。 –

+0

結果を含むデータセットのグローバルメソッドを作成することができ、メソッドの戻り値の型はDataSetです。 DDL.DataSource =あなたのmetod名として適用することができます。 –

+0

その問題はメソッドであるため、データベースはすべてのローに対してアクセスされます。 999がデータベースに非常に多くを呼び出す1000の行がある場合。 –

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イベントハンドラを使用することができますRowDataBoundを使用せずにdropdownに転送します。

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に持っている、そして、あなたはあなたのドロップダウンをバインドする必要があることに注意してください、次のようにdropdownにデータをバインドし、Page_Loadイベントでそれを呼び出すよ関数を作成

関連する問題