有问题填充我的checkedListBox

时间:2014-02-18 08:27:06

标签: c# winforms checklistbox

所以这里发生了什么事。当我按下事件button1以从我的数据库中检索数据时,它会显示System.Data.DataRowView。但是,当我再次按下button1事件时,它会显示实际结果和正确的数据。我想知道如何通过单击按钮来显示实际数据

来解决这个问题
private void button1_Click(object sender, EventArgs e)
{           
    SqlConnection con = new SqlConnection(@"SQLCONNECTIONSTRING");
    con.Open();
    SqlCommand cmd = new SqlCommand("Select * from tbl_members", con);
    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    SqlDataReader reader = cmd.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Columns.Add("FullName", typeof(string));
    dt.Load(reader);

    DataSet ds = new DataSet();
    adapter.Fill(ds);
    checkedListBox1.DisplayMember = "FullName";
    checkedListBox1.ValueMember = "FullName";
    checkedListBox1.DataSource = ds.Tables[0];
    checkedListBox1.Enabled = true;
    checkedListBox1.Refresh();

    con.Close();
}

2 个答案:

答案 0 :(得分:1)

试试这个..你不需要执行两次查询。

private void button1_Click(object sender, EventArgs e)
{           
   SqlConnection con = new SqlConnection(@"SQLCONNECTIONSTRING");
   con.Open();
   SqlCommand cmd = new SqlCommand("Select * from tbl_members", con);
   SqlDataAdapter adapter = new SqlDataAdapter(cmd);
   //SqlDataReader reader = cmd.ExecuteReader();
   DataTable dt = new DataTable();
   dt.Columns.Add("FullName", typeof(string));

   DataSet ds = new DataSet();
   adapter.Fill(ds);
   dt=ds.Tables[0];
   checkedListBox1.DisplayMember = "FullName";
   checkedListBox1.ValueMember = "FullName";
   checkedListBox1.DataSource = ds.Tables[0];
   checkedListBox1.Enabled = true;
   checkedListBox1.Refresh();

   con.Close();

}

答案 1 :(得分:0)

作业顺序不应该不同吗?

checkedListBox1.DataSource = ds.Tables[0];
checkedListBox1.DisplayMember = "FullName";
checkedListBox1.ValueMember = "FullName";

而不是

checkedListBox1.DisplayMember = "FullName";
checkedListBox1.ValueMember = "FullName";
checkedListBox1.DataSource = ds.Tables[0];