下拉列表未与 sqldatareader 绑定
本文关键字:绑定 sqldatareader 下拉列表 | 更新日期: 2023-09-27 18:29:47
我有一个集合大约五个下拉列表的表单。 我有我的查询如下。
string sql = "SELECT a.clientID ,a.[cname],b.bid,b.[bname],c.contactID, c.[name] FROM "
+ " dbo.[CLIENT] AS a INNER JOIN dbo.[BRANCH] AS b "
+ "ON a.clientID = b.clientID JOIN dbo.[CONTACT] AS "
+ " c ON b.bid = c.bid ORDER BY a.clientID ";
然后,我遵循并将我的下拉列表分别绑定到它们各自的列,如下所示。
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;
SqlDataReader reader = cmd.ExecuteReader();
drClient.Enabled = true;
drClient.DataSource = reader;
drClient.DataTextField = "cname";
drClient.DataValueField = "clientID";
drClient.DataBind();
drBranch.Enabled = true;
drBranch.DataSource = reader;
drBranch.DataTextField = "bname";
drBranch.DataValueField = "bid";
drBranch.DataBind();
drContact.Enabled = true;
drContact.DataSource = reader;
drContact.DataTextField = "name";
drContact.DataValueField = "contactID";
drContact.DataBind();
drEmail.Enabled = true;
drEmail.DataSource = reader;
drEmail.DataTextField = "name";
drEmail.DataValueField = "contactID";
drEmail.DataBind();
drFax.Enabled = true;
drFax.DataSource = reader;
drFax.DataValueField = "contactID";
drFax.DataTextField = "name";
drFax.DataBind();
当我运行它时,只有第一个下拉列表成功绑定。其余的没有。我还尝试通过添加来循环阅读器
while(reader.read())
{
then my bindings
}
以上也失败了。我也在下面循环。
while(read.HasRows)
{
}
它仍然失败。我很困惑,任何帮助将不胜感激。谢谢
阅读器是readonly
的,并且只转发,这就是为什么只有第一个dropdonw
被数据填充而其他数据是空的。您可以使用datset
或Datatable
来解决相同的问题。
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;
Dataset dsresult = cmd.ExecuteDataset();
If(dsResult !=null)
{
if(dsResult.Rows.count>0)
{
drClient.Enabled = true;
drClient.DataSource = dsResult.Tables[0] ;
drClient.DataTextField = Convert.ToString(ds.Tables[0].Columns["cname"]);
drClient.DataValueField = ds.Tables[0].Columns["clientID"] ;
drClient.DataBind();
}
}
Datareader
连接的体系结构需要连续连接,并在正向模式下一次获取一行,更好地使用dataset
使用disconnected architecture
,可用于多次检索数据。
这
似乎是明显的回发问题。
在回发上绑定您的下拉列表。
例如。
if(!IsPostBack)
{
populateDdl();
}
要么你必须为每个绑定创建一个单独的读取器
或者您可以通过填写数据表来做到这一点(我更喜欢这个(。喜欢
DataTable dt = new DataTable();
using (SqlDataAdapter a = new SqlDataAdapter(sql, connection))
{
a.Fill(dt);
}
drClient.DataSource = dt;
drClient.DataBind();
drBranch.DataSource = dt;
drBranch.DataBind();
drContact.DataSource = dt;
drContact.DataBind();
drFax.DataSource = dt;
drFax.DataBind();
您的选择是重新运行/重新填充它或创建单独的读取器,或者最好是填充数据表,然后您可以重用数据表。