2013-01-14 6 views
5

Przeczytałem kilka innych wątków i nie działałem dla mnie = \ Mam GridView z DropDownList w jednym polu. Chciałbym wiedzieć Jak mogę ustawić dla tego DataSource? Nie używam szablonów ani ItemTemplate, ani EditItemTemplate. Nie wiem, jak to działa, więc nie używam go jeszcze.Jak ustawić DataSource do DropDownList?

Do tej pory stworzyłem tylko GridView i wypełniłem pola danymi, ale nie wiem jak zrobić to samo dla DropDownList. Czegoś brakuje Myślę, że daje mi błąd ("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(); 
     } 

Próbowałem też to/ten sam błąd = \

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); 
      } 

I Tried to zbyt ...

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> 

Code Behind:

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

Lepiej pokazać jakiś kod. Co próbujesz? – Ofiris

+0

Spróbuj wyszukać tutaj [tony przykładów .NET] (http://www.google.com) – MethodMan

+0

Edytowałem wpis. To wszystko, co mam do tej pory = \ Już szukałem tam i nadal to robię ... Dzięki – Ghaleon

Odpowiedz

0

mi rozwiązać mój problem tak:

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

dane Bind Row związane wydarzenie w znacznikach, jak poniżej:

<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? 

W kodzie za:

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(); 


    } 

LUB

Jeśli rozwijanej będzie mieć taki sam opcje dla każdego wiersza, nie musisz go wiązać podczas zdarzenia RowDataBound .. Możesz dodać element s do listy rozwijanej w znacznikach jak poniżej:

<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

Czy mogę wykonać normalną kwerendę, która zwraca zestaw danych i zrobić foreach na zestawie danych i wypełnić listę rozwijaną?z tą metodą, którą mi pokazałeś? – Ghaleon

+0

@Ghaleon Metoda "grvGrid_RowBound" jest wywoływana dla każdego wiersza siatki. Więc twoje źródło danych_danych może być DataTable lub DataView, jeśli dobrze cię rozumiem .. i możesz przeczytać http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound. aspx dla więcej informacji – ajp

+0

Nie @Ghaleon, będziesz musiał wtedy użyć ddlList.Items.Add(), aby dodać elementy w tym przypadku. – StingyJack

1

ddlList.DataTextField = "Text"; Jeśli w tym wierszu występuje błąd, upewnij się, że w źródle danych lub w zestawie danych masz tę samą nazwę kolumny. jeśli jego nazwa jest tekstowa, należy przypisać ddlList.DataTextField = "textname";

Tylko myśl!

+0

Sprawdziłem to też. Myślałem tak samo jak ty! Ale w porządku, ta metoda zwraca mi dwie kolumny o nazwach: 'prioridade' i' id' ale nadal błąd = \\ – Ghaleon

+0

Ale błąd jest teraz w wierszu, który ustawiam DataSource: ddlist.DataSource = ds; – Ghaleon

+0

Czy masz jakieś wartości w ds? użyj punktu przerwania i sprawdź, co faktycznie zwraca. Czy masz SQLDATASOURCE na swojej stronie aspx? – rach

1

Prosimy śledzić ten kod przypisać źródła danych do rozwijanej

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")); 
Powiązane problemy