下拉列表不与sqldatareader绑定

时间:2013-09-02 05:51:24

标签: c# asp.net drop-down-menu 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)
{

}

它仍然失败。我很困惑,任何帮助将不胜感激。感谢

4 个答案:

答案 0 :(得分:1)

阅读器为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,使用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)

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