1

我有一个包含大约五个下拉列表的表格。我的查询如下。

 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

4 回答 4

1

Reader is readonlyand forward only 这就是为什么只有首先dropdonw填充数据而其他人是空的。您可以使用datsetorDatatable来解决同样的问题。

  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可以用于多次检索数据。

于 2013-09-02T06:21:48.153 回答
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();
于 2013-09-02T05:54:24.913 回答
0

这似乎很明显回发问题。

在 !postback 上绑定你的下拉列表。

例如。

if(!IsPostBack)    
 {
   populateDdl();
 }
于 2013-09-02T05:55:50.590 回答
0

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

于 2013-09-02T06:15:25.033 回答