C# 如何获取绑定的复选框的键(id)
我有一个Windows窗体应用程序,还使用SQL从数据库中获取数据。我的Windows窗体应用程序中有一个绑定的检查列表框,我想获取检查列表框中所有选中项的主键(值)。我意识到的是在组合框中,它们有一个内置方法“selectedValue”,我想知道我们是否可以在checkListBox中通过循环checkListBox中的checkedItems来做同样的事情,并获得它的值 假设在我的db表中,我有:C# 如何获取绑定的复选框的键(id),c#,winforms,C#,Winforms,我有一个Windows窗体应用程序,还使用SQL从数据库中获取数据。我的Windows窗体应用程序中有一个绑定的检查列表框,我想获取检查列表框中所有选中项的主键(值)。我意识到的是在组合框中,它们有一个内置方法“selectedValue”,我想知道我们是否可以在checkListBox中通过循环checkListBox中的checkedItems来做同样的事情,并获得它的值 假设在我的db表中,我有: EmployeeId Employee Name 1
EmployeeId Employee Name
1 Jimmy
2 Pam
3 Bob
4 Kobe
我的活页签列表框显示了如下内容
[x]Jimmy
[x]Pam
[]Bob
[]Kobe
我可以使用sql查询获取checkedItem项的id吗。现在假设Jimmy和Pam被检查了,我想得到他们的雇员ID。我不知道怎么做。我们将不胜感激
select * from employee_table where employeeId = '"+checkListBox.SelectedValue+"'
或
这方面的东西可能会对你有所帮助。 它的基本功能是构建一个参数化查询,然后使用添加所有选定项。然后使用读取器,您可以解析每个返回的记录。下面的代码可能需要一些修改才能使用,但应该可以帮助您入门 尽管我强烈建议使用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
}
}
}
var query=“从EmployeeId位于(@ids)中的employee_表中选择*”;
var id=String.Join(“,”
MyCheckBoxList.Items
.Cast()
.其中(x=>x.Selected)
.选择(x=>x.Value);
使用(var连接=新的SqlConnection(myConnectionString))
{
connection.Open();
使用(var命令=新的SqlCommand(查询、连接)
{
command.Parameters.Add(“ids”,ids);
var reader=command.ExecuteReader();
while(reader.Read())
{
//从读卡器获取所有需要的数据
}
}
}
您不需要再次转到数据库来检索项目的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
s添加到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());
}
注意:
如果您使用另一种方法连接到数据库,只需更改此代码即可满足您的要求,例如,此代码使用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());
}
private void CheckedListBoxSample\u加载(对象发送方,事件参数e)
{
var connection=@“数据源=(localdb)\v11.0;初始目录=TestDB;集成安全性=True;MultipleActiveResultSets=True;”;
var command=“从类别中选择Id、名称”;
var dataAdapter=new System.Data.SqlClient.SqlDataAdapter(命令,连接);
var table=新数据表();
dataAdapter.Fill(表);
var list=table.Rows.Cast()
.选择(行=>new ItemModel
{
Id=行字段(“Id”),
名称=行字段(“名称”)
})
.ToList();
this.checkedListBox1.Items.AddRange(list.Cast().ToArray());
}
你可以发布填充列表框的代码吗?我坚信你已经有了EmployeeID,你不需要对此进行任何查询。只需查看你在复选框中填充的代码,此时你正在同时提取EmployeeID和name。你正在将ID和name绑定到复选框中,并通过选择获得nameedvalue属性。为什么不尝试选择EdItem来获取ID。此外,我觉得,您应该了解流程,而不是跳过编码。因此,请花些时间在纸上了解流程,并熟悉Windows应用程序控件。@DragonBorn我看到您关于此主题的其他问题已经得到了回答。您可以接受我的回答re,因为这是一个很好的答案,适用于您不使用数据表的时候:)这样,它对其他用户将来会更有用:)@RezaAghaei会的:)嘿,floros,谢谢您的回复。我只是想知道什么是(@ids),它是我数据库中的一列,还是我需要定义它somewhere@DragonBorn它是SqlQuery使用的参数的名称,当command.Parameters.Add(“ids”,ids)时,它将被替换为数据代码>被调用。有关参数的更多信息,请参阅。它可以帮助您防止SQL注入。
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));
});
}
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());
}