簡體   English   中英

C#Checkedlistbox數據綁定

[英]C# Checkedlistbox data binding

我在C#中有一個checkedlistBox ,是從sql-server填充的。 創建新記錄時,我需要插入檢查項,並且需要更新某個記錄的先前選擇的項目。

首先,我嘗試讀取特定記錄的選定項目,因此我嘗試了以下操作:

我將每個項目的值成員與我從sql查詢中獲得的列表進行比較(如果它與我檢查的項目匹配)。 所以我需要使用類似value選項的東西。

if(checkedListBox1.Items.IndexOf(i).**Value**

        string sql = @"select cs.id from[dbo].[Channel_availableSpecs] cas inner join[dbo].[Channel_specs] cs on cas.ChennelSpec_Id = cs.id
                where cas.Channel_Id =" + val + "order by cs.id";
        SqlCommand cmd = new SqlCommand(sql, conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dta = new DataTable();
        da.Fill(dta);
        foreach (DataRow dr in dta.Rows)
        {
            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                 if(checkedListBox1.Items.IndexOf(i).**Value** == dr.ToString()) checkedListBox1.SetItemCheckState(i, CheckState.Checked);
            }
            conn.Close();

        }
    }

填寫Checkedlistbox

 public static void FillCheckedListox(CheckedListBox checkedListBox, string query,string displayMember, string valueMember) {

        using (SqlConnection con = new SqlConnection(ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                cmd.CommandType = CommandType.Text;
                using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                {
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    ((ListBox)checkedListBox).DataSource = dt;
                    ((ListBox)checkedListBox).DisplayMember = displayMember;
                    ((ListBox)checkedListBox).ValueMember = valueMember;
                }
            }
       }

這是解決方案

private void selectSpecs(DataTable table)
        {
            while (checkedListBox1.CheckedIndices.Count > 0)
            {
                checkedListBox1.SetItemChecked(checkedListBox1.CheckedIndices[0], false);
            }

        for (int i = 0; i < checkedListBox1.Items.Count; i++)
        {

            DataRow r;
            r = ((DataRowView)this.checkedListBox1.Items[i]).Row;
            string val = (r[this.checkedListBox1.ValueMember]).ToString();
            channelsSpecs.Add(Convert.ToInt32(val));
            r = null;
            for (int j = 0; j < table.Rows.Count; j++)
                foreach (DataRow dataRow in table.Rows)
                    foreach (var item in dataRow.ItemArray) if (val.ToString() == item.ToString()) checkedListBox1.SetItemChecked(i, true);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM