2013-01-14 62 views
5

我讀了一些其他線程,並沒有爲我工作= \ 我有一個GridViewDropDownList在一個字段中。我想知道如何爲此設置DataSource?我沒有使用模板既不ItemTemplate或EditItemTemplate我不知道它是如何工作的,所以我還沒有使用它。如何將DataSource設置爲DropDownList?

到目前爲止,我只創建了GridView並填充了數據字段,但我不知道如何爲DropDownList做同樣的事情。缺少的東西我想,這是給我一個錯誤("The Reference of the Object was not set as an instance of an object"

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
     {         
      DropDownList Drop_Prioridades = (DropDownList)e.Row.FindControl("Drop_Prioridades"); 
      Drop_Prioridades.DataTextField = "BAIXA"; 
      Drop_Prioridades.DataValueField = "1"; 
      Drop_Prioridades.DataTextField = "MEDIA"; 
      Drop_Prioridades.DataValueField = "2"; 
      Drop_Prioridades.DataTextField = "ALTA"; 
      Drop_Prioridades.DataValueField = "3"; 
      Drop_Prioridades.DataBind(); 
     } 

我也試過這種/同樣的錯誤= \

DataSet ds = func.LoadPriority(); 

      foreach (DataRow row in ds.Tables[0].Rows) 
      { 
       ListItem item = new ListItem(); 
       item.Text = row["prioridade"].ToString(); 
       item.Value = row["id"].ToString(); 
       DropDownList ddlPrioridades = (DropDownList)e.Row.FindControl("Drop_Prioridades"); 
       ddlPrioridades.Items.Add(item); 
      } 

,並試圖這也太...

HTML :

<columns>      

    <asp:TemplateField HeaderText="PRIORIDADE" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="100px"> 
      <ItemTemplate> 
       <asp:DropDownList ID="Drop_Prioridades" Width="120px" runat="server" ></asp:DropDownList> 
</ItemTemplate>      
</asp:TemplateField> 

代碼背後:

DataSet ds = func.CarregaPrioridade(); 
      DropDownList ddlist = (DropDownList)e.Row.FindControl("Drop_Prioridades"); 
      ddlist.DataSource = ds; 
      ddlist.DataTextField = "prioridade"; 
      ddlist.DataValueField = "id"; 
+3

更好的表現出一定的代碼。你有什麼嘗試? – Ofiris

+0

嘗試在這裏進行搜索[.NET示例噸](http://www.google.com) – MethodMan

+0

我編輯了帖子。這就是我到目前爲止= \ 我已經在那裏搜索,我仍然在做...謝謝 – Ghaleon

回答

0

我解決我的問題是這樣的:

DataSet ds = SomeMethodToFillTheDataSet() 

foreach(DataRow row in ds.tables[0].Rows) 
{ 
    ListItem item = new ListItem(); 
    item.text = "fieldName"; e.g Name 
    item.value = "FieldName"; e.g ID 
    DropDOwnList.Items.Add(item); 
} 
1

在標記綁定事件綁定行數據,如下圖所示:

<asp:GridView ID="grvGrid" runat="server" OnRowDataBound="grvGrid_RowBound"> 
    <Columns> 
     <asp:TemplateField ItemStyle-HorizontalAlign="Left" ItemStyle-VerticalAlign="Top" ItemStyle-Width="7%"> 
       <ItemTemplate> 
        <asp:DropDownList ID="ddlList" runat="server"/> 
       </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView? 

在後面的代碼:

protected void grvGrid_RowBound(object sender, GridViewRowEventArgs e) 
{ 
    DropDownList ddlList= (DropDownList)e.Row.FindControl("ddlList"); 
    ddlList.DataSource = _dSource; 
    ddlList.DataTextField = "text"; 
    ddlList.DataValueField = "value"; 
    ddlList.DataBind(); 


    } 

OR

如果下拉列表中都將有相同每行的選項,您不需要在RowDataBound事件期間綁定它。 您可以將項目添加到標記中的下拉列表中,如下所示:

<asp:DropDownList id="ddlList"runat="server"> 

       <asp:ListItem Selected="True" Value="White"> White </asp:ListItem> 
       <asp:ListItem Value="Silver"> Silver </asp:ListItem> 
       <asp:ListItem Value="DarkGray"> Dark Gray </asp:ListItem> 
       <asp:ListItem Value="Khaki"> Khaki </asp:ListItem> 
       <asp:ListItem Value="DarkKhaki"> Dark Khaki </asp:ListItem> 

      </asp:DropDownList> 
+0

我可以做一個普通的Query,它返回一個DataSet並對數據集進行foreach並填充下拉列表?用這種方法你給我看? – Ghaleon

+0

@Ghaleon爲網格的每一行調用方法'grvGrid_RowBound'。所以你的數據集_dsource可以是一個DataTable或DataView,如果我理解你正確..你可以閱讀http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound。 aspx for more info – ajp

+0

否@Ghaleon,您將不得不使用ddlList.Items.Add()添加這種情況下的項目。 – StingyJack

1

ddlList.DataTextField = "Text";如果這一行給你一個錯誤,那麼確保在你的數據源或數據集中有相同的列名。 如果其文本名,那麼你應該分配ddlList.DataTextField = "textname";

只是一個念頭!

+0

我也檢查過。以爲你也一樣!但它是好的,該方法返回兩列,名爲:'prioridade'和'id',但仍然錯誤= \\ – Ghaleon

+0

但現在的錯誤是在我設置數據源的行:ddlist.DataSource = ds; – Ghaleon

+0

你有什麼值ds?使用斷點並檢查它實際返回的內容。你的aspx頁面中有SQLDATASOURCE嗎? – rach

1

請遵循此代碼分配一個數據源到下拉

DataTable dt = ds.tables[0]; 
    DropdownId.DataSource = dt; 
    DropdownId.DataTextField = "Text Column"; 
    DropdownId.DataValueField = "Value Column"; 
    DropdownId.DataBind(); 
    DropdownId.Items.Insert(0, new ListItem("-- Select --", "0")); 
相關問題