如何获得绑定的checkListBox的键(id)
本文关键字:id 的键 checkListBox 何获得 绑定 | 更新日期: 2023-09-27 18:15:52
我有一个Windows窗体应用程序,也使用SQL从我的数据库获取数据。我有一个绑定的checkListBox在我的Windows窗体应用程序,我想得到主键(值)所有选中的项目在我的checkListBox。我意识到的是在组合框中,他们有一个内置方法'selectedValue'我想知道我们是否可以在checkListBox中做同样的事情通过checkListBox中的checkkeditems循环并获得其值
假设在db表中,我有:
EmployeeId Employee Name
1 Jimmy
2 Pam
3 Bob
4 Kobe
我的绑定checkListBox显示了类似
的内容[x]Jimmy
[x]Pam
[]Bob
[]Kobe
我可以得到checkedItem项目的id使用sql查询。现在假设Jimmy和Pam被选中了,我想获得他们的employeeId。我不知道该怎么做。
select * from employee_table where employeeId = '"+checkListBox.SelectedValue+"'
或
foreach(var item = item.CheckedItems{
select * from employee_table where employeeId = '"items"';
}
您不需要再次访问数据库来检索项目的Id。
您可以为包含Id
和Name
属性的项目创建一个类,并覆盖ToString
方法以返回您想要在CheckedListBox
中显示的字符串:
public class ItemModel
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
然后在加载数据时,您可以选择输出并将其塑造为ItemModel
,然后将这些ItemModel
添加到CheckedListBox:
private void Form_Load(object sender, EventArgs e)
{
var db = new TestDBEntities();
//Select items that you need and shape it to ItemModel
var list = db.Categories.Select(x => new ItemModel
{
Id = x.Id,
Name = x.Name
})
.ToList();
//We cast the list to object[] because AddRange method accept object[]
this.checkedListBox1.Items.AddRange(list.Cast<object>().ToArray());
}
然后,当您需要知道已检查项的Id
时,您可以简单地将每个已检查项强制转换为ItemModel
,并使用其Id
属性:
private void button1_Click(object sender, EventArgs e)
{
this.checkedListBox1.CheckedItems.Cast<ItemModel>()
.ToList()
.ForEach(item =>
{
MessageBox.Show(string.Format("Id:{0}, Name:{1}", item.Id, item.Name));
});
}
注意:
如果您使用另一种方法连接到数据库,您可以简单地更改此代码以满足您的要求,例如此代码使用ADO.Net
对象将数据塑造为ItemModel
:
private void CheckedListBoxSample_Load(object sender, EventArgs e)
{
var connection = @"data source=(localdb)'v11.0;initial catalog=TestDB;integrated security=True;MultipleActiveResultSets=True;";
var command = "SELECT Id, Name From Categories";
var dataAdapter = new System.Data.SqlClient.SqlDataAdapter(command, connection);
var table = new DataTable();
dataAdapter.Fill(table);
var list = table.Rows.Cast<DataRow>()
.Select(row => new ItemModel
{
Id = row.Field<int>("Id"),
Name = row.Field<string>("Name")
})
.ToList();
this.checkedListBox1.Items.AddRange(list.Cast<object>().ToArray());
}
以下内容可能对您有所帮助。基本上,它所做的是构建一个参数化查询,然后使用SqlParameters添加所有选定的项。然后使用阅读器,您就可以解析每个返回的记录。下面的代码可能需要一些修改才能使用,但应该可以帮助您入门。
虽然我强烈建议使用ORM这样的实体框架。使用ORM,您不必构建自己的查询,并且允许您使用强类型类与数据库"对话"。
var query = "SELECT * FROM employee_table WHERE imployeeId IN (@ids)";
var ids = String.Join(","
MyCheckBoxList.Items
.Cast<ListItem>()
.Where(x => x.Selected)
.Select(x => x.Value);
using (var connection = new SqlConnection(myConnectionString))
{
connection.Open();
using(var command = new SqlCommand(query, connection)
{
command.Parameters.Add("ids", ids);
var reader = command.ExecuteReader();
while(reader.Read())
{
//get all the needed data from the reader
}
}
}