[英]How can I filter dataGridView by checking multiple items in CheckedListBox?
[英]How can I list table columns (returned through an SQL query) as items in a CheckedListBox?
如果我有下表:
canAssign
------------
1
有没有办法将列 header 文本(例如canAssign
等)添加到CheckedListBox
作为用户可以检查的标签?
我找到的所有答案都将值列为标签,如下所示:
☐ 1
而不是这个:
☐ canAssign
仅作为示例,如果我使用以下内容列出 canAssign 列中的任何值,我如何更改它以列出“canAssign”列 header 文本?
string myString = "SELECT canAssign FROM Permissions";
using (SqlConnection myConn = new SqlConnection(globalConnectionString))
{
try {
myConn.Open();
using (SqlCommand myComm = new SqlCommand(myString, myConn))
{
SqlDataReader myReader = myComm.ExecuteReader();
while (myReader.Read()) {
checkedListBox1.Items.Add(myReader["canAssign"]);
}
}
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
在这种情况下,我认为您希望在CheckedListBox.Items集合中有自定义对象,并将CheckedListBox.DisplayMember 属性与CheckedListBox.ValueMember一起使用
显示成员
获取或设置一个字符串,该字符串指定要显示其内容的列表框中包含的对象的属性。
价值会员
获取或设置一个字符串,该字符串指定要从中绘制值的数据源的属性。
例子
public class ListBoxItem
{
public string Text { get; set; }
public string Value { get; set; }
}
checkedListBox.DisplayMember = "Text";
checkedListBox.ValueMember = "Value";
...create connection and create command logic...
command.CommandText = "SELECT * FROM Permissions";
var reader = command.ExecuteReader();
while (reader.Read()) {
// of course it would be better to cache that and go straight by indexes
for(int i = 0; i < reader.FieldCount; i++) {
var columnName = reader.GetName(i);
// some logic to humanize values like 'canDownload' to 'Can Download'
var label = getLabelFor(columnName);
var value = reader.GetBoolean(i);
checkedListBox.Items.Insert(0, new ListBoxItem(label , value));
}
}
假设您的代码片段中的 SQL 查询是获取特定用户的权限并使用数据库中的相同字段名称将它们显示在 CheckedListBox 中。
如果这听起来不错,请阅读条目,循环以分别通过SqlDataReader.GetName和SqlDataReader.GetBoolean方法获取字段名称和值。
//For example...
var myString = "SELECT * FROM Permissions WHERE UserId = ....";
try
{
using (SqlConnection myConn = new SqlConnection(globalConnectionString))
using (SqlCommand myComm = new SqlCommand(myString, myConn))
{
myConn.Open();
using (var myReader = myComm.ExecuteReader())
if (myReader.Read())
for (var i = 0; i < myReader.FieldCount; i++)
checkedListBox1.Items.Add(myReader.GetName(i), myReader.GetBoolean(i));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.