C# 使用CodeBehind中的数据表填充DropDownList

C# 使用CodeBehind中的数据表填充DropDownList,c#,asp.net,C#,Asp.net,如何使用“代码隐藏”中的数据表设置此下拉列表 <asp:GridView ID="gvTemplateFields" runat="server" CssClass="grid" AutoGenerateColumns="false" <Columns> <asp:TemplateField HeaderText="Estado" ItemStyle-

如何使用“代码隐藏”中的数据表设置此下拉列表

<asp:GridView ID="gvTemplateFields"
                runat="server"
                CssClass="grid"
                AutoGenerateColumns="false"

    <Columns>
        <asp:TemplateField HeaderText="Estado" ItemStyle-Width="50px">
            <ItemTemplate>
                <asp:DropDownList ID="RiskWorkDropDownList" runat="server">
                    <asp:ListItem Value="1">Pendiente</asp:ListItem>
                    <asp:ListItem>Atendido</asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>                
    </Columns>

    <EmptyDataTemplate>No off-site links found.</EmptyDataTemplate>

</asp:GridView>
错误:

System.NullReferenceException: Object reference not set to an instance of an object.
RiskWorkDropDownList
为空

RiskWorkDropDownList.DataSource = templateFields;
我正试图让它像这个问题/答案一样工作:


像这样简单的事情应该可以帮助您:

C#

使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
命名空间WebApplication1
{
公共部分类WebForm1:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
DataTable theTable=新DataTable();
table.Columns.Add(“名称”,typeof(字符串));
表.行.添加(“名称1”);
table.Rows.Add(“Name2”);
table.Rows.Add(“Name3”);
对于(int i=0;i
ASP


您可能希望在创建新行时绑定每个新的DropDownList实例。那么您可能需要GridView.RowCreated事件

void gvTemplateFields_RowCreated(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        (DropDownList)riskWorkDropDownList = (DropDownList)e.Row.FindControl("RiskWorkDropDownList");

        riskWorkDropDownList.DataSource = dataTable; //Your data table
        riskWorkDropDownList.DataBind(); 
    }
}

我假设您正在使用SqlExpress server并试图将数据从数据库表中获取到dropdownlist中, 请试试这个

var Cn = new System.Data.SqlClient.SqlConnection();
Cn.ConnectionString = "Server=.\\SqlExpress;Database=YourDatabasename;Trusted_Connection=True";
Cn.Open();
var Cm = Cn.CreateCommand();
Cm.CommandText = string.Format(@"Select * From DataTablename");
var Dr = Cm.ExecuteReader();

//add all data from database to dropdownlist
while (Dr.Read())
    {
       RiskWorkDropDownList.Items.Add(new ListItem(Dr.GetValue(1/*your table column*/).ToString()));
    }

Cn.Close();

显示您迄今为止在代码隐藏方面的尝试,这样无论谁回答都不必从头开始编写。哪一行给出了错误?什么对象是空的?你知道NullReferenceException是什么吗?我能不能只使用DataBind()之类的东西?不值得投反对票,因为你没有要求。当你提供的信息很少甚至没有时,不要投票给帮助你的人。以防万一,我也没有。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
    </div>
    </form>
</body>
</html>
void gvTemplateFields_RowCreated(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        (DropDownList)riskWorkDropDownList = (DropDownList)e.Row.FindControl("RiskWorkDropDownList");

        riskWorkDropDownList.DataSource = dataTable; //Your data table
        riskWorkDropDownList.DataBind(); 
    }
}
var Cn = new System.Data.SqlClient.SqlConnection();
Cn.ConnectionString = "Server=.\\SqlExpress;Database=YourDatabasename;Trusted_Connection=True";
Cn.Open();
var Cm = Cn.CreateCommand();
Cm.CommandText = string.Format(@"Select * From DataTablename");
var Dr = Cm.ExecuteReader();

//add all data from database to dropdownlist
while (Dr.Read())
    {
       RiskWorkDropDownList.Items.Add(new ListItem(Dr.GetValue(1/*your table column*/).ToString()));
    }

Cn.Close();