5

我阅读了其他一些线程并没有为我工作=\我有GridView一个DropDownList在一个领域。我想知道我该如何设置DataSource?我没有使用模板,也没有 ItemTemplate 或 EditItemTemplate 我不知道它是如何工作的,所以我还没有使用它。

到目前为止,我只创建了 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";
4

4 回答 4

1

在标记中绑定 Row 数据绑定事件,如下:

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


  }

或者

如果您的下拉菜单对每一行都有相同的选项,则不需要在 RowDataBound 事件期间绑定它。您可以将 item 添加到标记中的下拉列表中,如下所示:

 <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>
于 2013-01-14T17:37:14.987 回答
1

ddlList.DataTextField = "Text";如果这一行给你一个错误,那么确保在你的数据源或数据集中你有相同的列名。如果它的文本名称,那么你应该分配ddlList.DataTextField = "textname";

只是一个想法!

于 2013-01-14T18:59:57.703 回答
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"));
于 2017-07-18T10:21:17.147 回答
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);
}
于 2013-01-22T13:45:40.090 回答