public void loadAllEmployeesFromSQLServer()
{
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
conn.ConnectionString = "Server=WIN2008SERVER;Database=Kiosk;Uid=kiosk;Pwd=kiosk;";
conn.Open();
string query = "SELECT [displayName],[activeDirectoryName],[roleID],[activeAccount] FROM [ProbationKiosk].[dbo].[Employees]";
cmd.Connection = conn;
cmd.CommandText = query;
SqlDataReader dr = cmd.ExecuteReader();
ArrayList allEmployees = new ArrayList();
while (dr.Read())
{
employees emp = new employees(dr["displayName"].ToString(), dr["activeDirectoryName"].ToString(), dr["roleID"].ToString(), Int32.Parse(dr["activeAccount"].ToString()));
allEmployees.Add(emp);
string[] employeeData = new string[3];
employeeData[0] = emp.commonName;
employeeData[1] = emp.activeDirectory;
employeeData[2] = emp.currentRole;
ListViewItem lvi = new ListViewItem(employeeData);
if (emp.isActive == 1)
{
checkedListBox1.Items.Add(lvi, true);
}
else
{
checkedListBox1.Items.Add(lvi, false);
}
}
}
我将CheckedListBox
作为多列表。
我调试了我的代码,我将数据存储到ListViewItem
但是当它显示在UI上时,它显示为
"ListViewItem {"name..."}"
而不是
"[ ] | First Name Last Name | active directory name | roleID"
答案 0 :(得分:0)
您看到了这一点,因为当您执行以下行时:
checkedListBox1.Items.Add(lvi, true);
它隐含地调用了lvi.ToString()
,它显示了该类的名称。
请改为尝试:
checkedListBox1.Items.Add(string.Join(" | ",
lvi.SubItems.Cast<ListViewItem.ListViewSubItem>().Select(x => x.Text)));
另外,我假设您将MultiColumn
上的CheckedListBox
属性设置为true
。这并没有很好地格式化,就像在网格中一样。它只是确定项目是在单个列中显示还是在空间允许时流入多个列。
MultiColumn = false
:
MultiColumn = true
:
您可以通过使用制表符来获得准表格布局,但如果某些字符串比其他字符串长得多,则可能看起来很有趣。
checkedListBox1.Items.Add(string.Join("\t",
lvi.SubItems.Cast<ListViewItem.ListViewSubItem>().Select(x => x.Text)));
你可以通过找到最长的可能字符串并相应地填充Text
属性来解决这个问题:
checkedListBox1.Items.Add(string.Join("",
lvi.SubItems.Cast<ListViewItem.ListViewSubItem>()
.Select(x => x.Text.Padding(20, ' ')));