下拉列表不与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
填充数据而其他人是空的。 您可以使用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
,该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();
您可以选择重新运行/重新填充或创建单独的读取器,或者更好地填充数据表,然后您可以重用数据表。