下拉列表不与sqldatareader绑定

我的表格收集了大约五下拉。 我的查询如下。

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填充数据而其他人是空的。 您可以使用datsetDatatable来解决同样的问题。

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

您可以选择重新运行/重新填充或创建单独的读取器,或者更好地填充数据表,然后您可以重用数据表。