下拉列表未与 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)
{
}

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

下拉列表未与 sqldatareader 绑定

阅读器是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,可用于多次检索数据。

似乎是明显的回发问题。

在回发上绑定您的下拉列表。

例如。

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

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