请,我真的很感激任何人可以帮助我解决以下问题。
我有一个Access数据库,希望将其加载到ListBox中。
我将ListBox DrawMode
设置为**OwnerDrawFixed
**,但是当我运行应用程序时,它显示的是(System.Data.DataRowView)
,而不是所有数据库记录。
我必须说,它在正常绘图模式下工作得很好。
下面是我的代码:
private void Form1_Load(object sender, EventArgs e)
{
ListBox1.DataSource = GetData();
ListBox1.DisplayMember = "empName";
}
DataTable dt;
private DataTable GetData()
{
dt = new DataTable();
using (OleDbConnection myConn = new OleDbConnection(ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
using (OleDbCommand myQuery = new OleDbCommand("select empName from empTable", myConn))
{
myConn.Open();
OleDbDataReader myReader = myQuery.ExecuteReader();
dt.Load(myReader);
}
}
return dt;
}
private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
bool isItemSelected = ((e.State & DrawItemState.Selected) == DrawItemState.Selected);
int itemIndex = e.Index;
if (itemIndex >= 0 && itemIndex < ListBox1.Items.Count)
{
Graphics g = e.Graphics;
SolidBrush backgroundColorBrush = new SolidBrush((isItemSelected) ? Color.FromArgb(255, 64, 64, 64) : Color.FromArgb(0,64,64,64));
g.FillRectangle(backgroundColorBrush, e.Bounds);
// Set text color
string itemText = ListBox1.Items[itemIndex].ToString();
SolidBrush itemTextColorBrush = (isItemSelected) ? new SolidBrush(Color.White) : new SolidBrush(Color.LightGray);
g.DrawString(itemText, e.Font, itemTextColorBrush, ListBox1.GetItemRectangle(itemIndex).Location);
// Clean up
backgroundColorBrush.Dispose();
itemTextColorBrush.Dispose();
}
e.DrawFocusRectangle();
}
再次感谢您的评分
2条答案
按热度按时间cidc1ykv1#
我建议对数据加载和用于填充ListBox的Items集合的方式以及
DrawItems
方法执行项目绘制的方式进行以下更改:1.使用OleDbDataAdapter来填充
DataTable
,而不是OleDbDataReader
。它使用起来很简单,并且会为您打开连接。1.返回一个
DataTable
,然后使用第一个Column的名称作为ListBox**DisplayMember
**,这样就不需要在这里硬编码提供要显示的信息的Field的名称。1.移除
DrawItem
方法中不必要的部分,并使用GetItemText()方法撷取表示ListControl
项目文字的字串。1szpjjfi2#
由于
ListBox
是数据绑定的,因此字符串是从DataSource
中提取的。因此,当您希望所有者绘制列表框时,需要执行以下操作之一:
或者按照Jimi的建议使用
GetItemText
函数。请注意,这有点难以找到,因为它不是
ListBox
,而是ListControl
函数。当然,硬编码字段名称不是一个好主意,但这至少应该将您指向数据。