2013-01-14 19 views
5

Tôi đọc một số chủ đề khác và không hoạt động cho tôi = \ Tôi có một GridView với một DropDownList trong một trường. Tôi muốn biết Tôi có thể đặt số DataSource như thế nào? Tôi không sử dụng Templates không ItemTemplate hoặc EditItemTemplate Tôi không biết làm thế nào nó hoạt động chính xác, vì vậy tôi không sử dụng nó được nêu ra.Làm cách nào để đặt DataSource thành DropDownList?

Cho đến nay tôi chỉ tạo GridView Và điền vào các trường có dữ liệu nhưng tôi không biết cách làm tương tự cho DropDownList. Một cái gì đó là mất tích Tôi đoán, đó là đem lại cho tôi một lỗi ("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(); 
     } 

tôi cũng cố gắng này/Same lỗi = \

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

Và Cố gắng này quá ...

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> 

Mã sau:

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

Better hiển thị một số mã. Bạn đã thử cái gì? – Ofiris

+0

thử thực hiện tìm kiếm ở đây [tấn ví dụ .NET] (http://www.google.com) – MethodMan

+0

Tôi đã chỉnh sửa bài đăng. Đó là tất cả những gì tôi đã có cho đến nay = \ Tôi đã tìm kiếm ở đó và tôi vẫn đang làm điều đó ... Cảm ơn – Ghaleon

Trả lời

0

tôi giải quyết vấn đề của tôi như thế này:

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

dữ liệu Ràng buộc Row kiện ràng buộc trong đánh dấu, như sau:

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

Trong đoạn mã sau:

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


    } 

HOẶC

Nếu bạn thả xuống sẽ có cùng tùy chọn cho mỗi hàng, bạn không cần phải liên kết nó trong Sự kiện RowDataBound .. Bạn có thể thêm mục s vào danh sách thả xuống trong đánh dấu như sau:

<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

Tôi có thể làm một truy vấn bình thường trả về một DataSet và tạo một foreach trên tập dữ liệu và điền vào danh sách thả xuống không?với phương pháp này bạn đã cho tôi thấy? – Ghaleon

+0

@Ghaleon Phương thức 'grvGrid_RowBound' được gọi cho mỗi hàng của lưới. Vì vậy, tập dữ liệu của bạn _dsource có thể là một DataTable hoặc DataView, nếu tôi hiểu chính xác bạn .. và bạn có thể đọc http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound. aspx để biết thêm thông tin – ajp

+0

Không có @Ghaleon, bạn sẽ phải sử dụng ddlList.Items.Add() để thêm các mục trong trường hợp đó. – StingyJack

1

ddlList.DataTextField = "Text"; Nếu dòng này cho bạn lỗi, hãy đảm bảo rằng trong nguồn dữ liệu hoặc tập dữ liệu của bạn có cùng tên cột. nếu tên văn bản, sau đó bạn nên chỉ định ddlList.DataTextField = "textname";

Chỉ là một ý nghĩ!

+0

Tôi cũng đã kiểm tra điều đó. Nghĩ như bạn đã làm! Nhưng không sao, phương thức đó trả về cho tôi hai cột, có tên: 'prioridade' và' id' nhưng vẫn là lỗi = \\ – Ghaleon

+0

Nhưng lỗi bây giờ nằm ​​trong dòng mà tôi đặt DataSource: ddlist.DataSource = ds; – Ghaleon

+0

Bạn có bất kỳ giá trị nào trong ds ?? sử dụng breakpoint và kiểm tra xem nó thực sự trả về cái gì. Bạn có SQLDATASOURCE trong trang aspx của mình không? – rach

1

Vui lòng làm theo mã này để gán một Datasource để thả xuống

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")); 
Các vấn đề liên quan