C# 数据未显示在动态下拉列表asp.net&C中(也没有错误)
//aspx代码C# 数据未显示在动态下拉列表asp.net&C中(也没有错误),c#,asp.net,C#,Asp.net,//aspx代码 <asp:DropDownList ID="DropDownList1" runat="server" DataTextField="fullname" DataValueField="username" AutoPostBack="True" Width="125px" Height="22px"></asp:DropDownList> 将codebehind更新为如下所示: if (!IsPostBack) { SqlConnecti
<asp:DropDownList ID="DropDownList1" runat="server" DataTextField="fullname" DataValueField="username" AutoPostBack="True" Width="125px" Height="22px"></asp:DropDownList>
将codebehind更新为如下所示:
if (!IsPostBack)
{
SqlConnection myConnection = new SqlConnection("Server=xyz;Database=db;Uid=db;Pwd=12345");
try
{
myConnection.Open();
SqlDataReader myReaderddl = null;
SqlCommand myCommandddl = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection);
myReaderddl = myCommandddl.ExecuteReader();
if (myReaderddl.HasRows)
{
ddlrep.DataSource = myReaderddl;
ddlrep.DataValueField = "username";
ddlrep.DataTextField = "fullname";
ddlrep.DataBind();
}
}
finally
{
if (myConnection != null)
{
myConnection.Close();
}
}
}
您的下拉列表应如下所示:
<asp:DropDownList ID="ddlrep" runat="server" Width="200px" ></asp:DropDownList>
SqlCommand cmd = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection);
cmd.Connection.Open();
SqlDataReader data_table = null;
data_table = cmd.ExecuteReader();
ddlrep.DataSource = data_table;
ddlrep.DataValueField = "username";
ddlrep.DataTextField = "fullname";
ddlrep.DataBind();
data_table.Close();
cmd.Connection.Close();
cmd.Connection.Dispose();
在pageload中,将代码放在该块下
if (!IsPostBack)
{
}
我还没有测试过这段代码,但它应该可以工作
using (var myConnection = new SqlConnection("Server=xyz;Database=db;Uid=db;Pwd=12345"))
{
using (var myCommandddl = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection))
{
var table = new DataTable();
using(var myAdapter = new SqlDataAdapter(myCommandddl))
myAdapter.Fill(table);
ddlrep.DataSource = table;
ddlrep.DataValueField = "username";
ddlrep.DataTextField = "fullname";
ddlrep.DataBind();
}
}
我做了一些更改,您应该注意:
使用USING语句。这提供了许多好处,例如自动调用IDisposable对象上的Dispose,而不管是否引发异常。在我看来,这是一个很好的视觉效果,可以显示何时何地放置一个对象。
不直接使用SqlDataRader,而是使用SqlDataAdapter填充表格:
这是我的一些旧代码,所以我现在使用EF不太好,但请尝试以下内容:
<asp:DropDownList ID="ddlrep" runat="server" Width="200px" ></asp:DropDownList>
SqlCommand cmd = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection);
cmd.Connection.Open();
SqlDataReader data_table = null;
data_table = cmd.ExecuteReader();
ddlrep.DataSource = data_table;
ddlrep.DataValueField = "username";
ddlrep.DataTextField = "fullname";
ddlrep.DataBind();
data_table.Close();
cmd.Connection.Close();
cmd.Connection.Dispose();
我从一个正在工作的项目中提取了这个,所以它应该可以工作。您将这个放在代码中的什么地方?页面加载?您能否提供描述DDL的标记以及代码背后的上下文?您在哪里/如何定义ddlrep?需要更多信息。我为您整理了代码是的,我在第页中有此代码。\u加载事件表中是否有数据也检查它当您在MyReaderDl=MyCommand和Dl.ExecuteReader上中断时,是否进入if块?正在返回数据吗?数据被拉入但它没有绑定到下拉列表Torres::仍然没有显示只是为了好玩,而不是进行绑定,如果您将绑定替换为:whileMyReaderDl.Read{ddlRep.Items.Addnew ListItemMyReaderDl[fullname],MyReaderDl[username];},它能工作吗?它是否迭代任何内容?无论哪种方式,它都会拉取数据,但不会显示。如果可能,则调试它..并查看它是否进入if块中..使用修改后的查询删除括号..我已调试,数据在那里,但它没有绑定。好的,做一件事删除下拉列表并粘贴我提到的用于下拉的代码。第一件。我也尝试了你以前的代码。有一件事是肯定的,它正在拉取数据,但它没有显示sqldatareader myReaderddl=null;SqlCommand myCommandddl=新的SqlCommandSELECT用户名,来自qa_用户的全名,myConnection;myReaderddl=myCommandddl.ExecuteReader;myReaderddl.Read;如果myReaderddl.HasRows{ddlrep.DataSource=myReaderddl;ddlrep.DataValueField=username;ddlrep.DataTextField=fullname;ddlrep.DataBind;}myReaderddl.Close;这起作用了。我不确定是什么问题。但效果很好。Thanks我认为问题是试图将SqlDataReader分配给DataSource属性。DataSource属性需要IEnumerable、IListSource、IDataSource或IHierarchicalDatasource的实例。
using (var myConnection = new SqlConnection("Server=xyz;Database=db;Uid=db;Pwd=12345"))
{
using (var myCommandddl = new SqlCommand("SELECT [username], [fullname] FROM [qa_users]", myConnection))
{
var table = new DataTable();
using(var myAdapter = new SqlDataAdapter(myCommandddl))
myAdapter.Fill(table);
ddlrep.DataSource = table;
ddlrep.DataValueField = "username";
ddlrep.DataTextField = "fullname";
ddlrep.DataBind();
}
}