我的表格收集了大约五个下拉菜单。我的查询如下。
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)
{
}
它仍然失败。我很困惑,任何帮助将不胜感激。感谢
答案 0 :(得分:1)
阅读器为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
并可用于多次检索数据。
答案 1 :(得分:0)
要么你必须为每个绑定创建一个单独的读者
或者你可以通过填充数据表(我更喜欢这个)来做到这一点。像,
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();
答案 2 :(得分:0)
这似乎是明显的回发问题。
绑定你的下拉!回发。
例如
if(!IsPostBack)
{
populateDdl();
}
答案 3 :(得分:0)
您的选择是重新运行/重新填充或创建单独的阅读器,或者更好地填充数据表,然后您可以重复使用数据表。