2012-02-28 13 views
0

私は次のように私のデータベース内の2つのテーブルを持っている:このDropDownListを作成するにはGridView内で動作しますか?

提案表:ID、タイトル、説明、StatusID ...など

SuggestionsStatus表:ID、ステータス

私は示すために、GridViewコントロールを使用しています提案と最後の列には、それぞれの提案のステータスを選択するためのDropDownListを配置します。今、私はDropDownListコントロールにステータスを表示しようとしたとき、私は次のエラーを持って、なぜ私は知りません:オブジェクト参照が非静的フィールド、メソッド、または プロパティ 'のために必要とされる

System.Web.UI.WebControls.ListControl.Items.get」

私のASP.NETコード:マイコードビハインド

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
         AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ID" 
         width="950px" CssClass="mGrid" 
         AlternatingRowStyle-CssClass="alt" 
         RowStyle-HorizontalAlign="Center" 
         DataSourceID="SqlDataSource1" 
         OnRowDataBound="GridView1_RowDataBound" > 
      <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
      <HeaderStyle Font-Bold = "true" ForeColor="Black" Height="20px"/> 
      <Columns> 
       <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
        ReadOnly="True" SortExpression="ID" /> 
       <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
       <asp:BoundField DataField="Description" HeaderText="Description" 
        SortExpression="Description" /> 
       <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
       <asp:BoundField DataField="Username" HeaderText="Username" 
        SortExpression="Username" /> 
       <asp:BoundField DataField="DivisionShortcut" HeaderText="Division" 
        SortExpression="DivisionShortcut" /> 
       <asp:TemplateField HeaderText="Status"> 
        <ItemTemplate> 
         <asp:DropDownList ID="DropDownList" runat="server" DataSourceID="SqlDataSource2" 
              Font-Bold="True" ForeColor="#006666" AppendDataBoundItems="false" 
              DataTextField="Status" DataValueField="ID" AutoPostBack="true" 
              OnDataBound="DropDownList_DataBound"> 
         </asp:DropDownList> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
      SelectCommand="SELECT  dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, dbo.SafetySuggestionsLog.Username, 
         dbo.Divisions.DivisionShortcut 
FROM   dbo.employee INNER JOIN 
         dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN 
         dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode" 
         FilterExpression="[DivisionShortcut] like '{0}%'"> 

         <FilterParameters> 
         <asp:ControlParameter ControlID="ddlDivision" Name="DivisionShortcut" 
               PropertyName="SelectedValue" Type="String" /> 
        </FilterParameters> 
     </asp:SqlDataSource> 

     <%--For the DropDownList--%> 
     <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
     ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
     SelectCommand="SELECT * FROM [SafetySuggestionsStatus]"></asp:SqlDataSource> 

protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    int i = 1; 
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.Cells[0].Text = i.ToString(); 
      i++; 
     } 

    } 

    protected void DropDownList_DataBound(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      DropDownList.Items.Insert(0, new ListItem("--Select--", "")); 
     } 
    } 

どのようにしてこの問題を解決できますか?あなたはそのItemsコレクションにアクセスするために、DropDownListコントロールにあなたのDropDownList_DataBoundイベントに送信者をキャストする必要がありますなっているように見える例外に基づいて

答えて

3

protected void DropDownList_DataBound(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     ((DropDownList)sender).Items.Insert(0, new ListItem("--Select--", "")); 
    } 
} 
+0

おかげで、私は本当にあなたの助けに感謝します。私はDropDownListに送信者をキャストすることを完全に忘れていました。 –

+0

クール、大歓迎です – KodeKreachor

2

これは、すべての上からです私の頭、コードは完璧で、しかし、ここであなたがする必要があるものだしない場合がありますので:

  1. あなたのRowDataBoundでは、行からDropDownListコントロールのインスタンスをキャスト。

    DropDownList drp = (DropDownList)e.Row.Cells[7].FindControl("DropDownList"); 
    

が続い

protected void bindDrop(DropDownList drp) 
{ 
    if (!IsPostBack) 
    { 
    drp.Items.Insert(0, new ListItem("--Select--", "")); 
    drp.DataBind() 
    } 
} 

はそれが何をすべきあなたのDataListコントロールにバインド

  1. 以下のいずれかのようなデータバインディング機能を呼び出すこと

+0

ありがとうございます。有用で役立つ解決策もあります。 –

関連する問題