Giới thiệu
Sau khi tìm kiếm ComboBox multicolumn với các cột cấu hình hiển thị và các thành phần giá trị, tôi quyết định tạo ra điều khiển của riêng tôi. ComboBox hiển thị nhiều cột là sự kết hợp của TextBox, Button và DataGridView. Tôi quyết định sử dụng DataGridView và nó là tiêu chí lọc cho chức năng tìm kiếm nhanh chóng. Một trong những điều khó khăn để tìm ra container để hiển thị trên phím bấm trên điều khiển combox. Tôi đã sử dụng ToolStripDropDown như một điều khiển máy chủ cho DataGridView để hiển thị các ComboBox popup trên phím bấm.
Thuộc tính:
- Show Header: Set cột khả năng hiển thị tiêu đề.
- Grid Lines: đường lưới None, Vertical, Horizontal hoặc Both.
- DropDown Height: Cấu hình DropDown Height. Nó sẽ hiển thị thanh cuộn nếu nhiều item.
- DataSource: DataSource sẽ là DataTable.
- SourceDataString: Thuộc tính bản đồ sẽ được hiển thị như cột.
- SourceDataHeader: tiêu đề cột sẽ được hiển thị nếu Hiển thị thuộc tính Tiêu đề là true.
- ColumnWidth: Chiều rộng cho mỗi cột.
- Display Column No: số cột sẽ được làm như DisplayMember.
- Value Column No: số cột sẽ được làm như ValueMember.
Sử dụng
Cách sử dụng điều khiển này rất đơn giản. Thiết lập các thuộc tính sau đây để cấu hình:
private void InitializeComboBox()
{
multiColumComboBox1.Clear();
multiColumComboBox1.SourceDataString = new string[3] { "ID", "Name", "Code" };
multiColumComboBox1.ColumnWidth = new string[3] { "0", "200", "50" };
multiColumComboBox1.DataSource = GetDataSource();
}
private DataTable GetDataSource()
{
DataTable dtSource = new DataTable();
DataColumn dtColID = new DataColumn("ID");
dtColID.DataType = System.Type.GetType("System.String");
dtSource.Columns.Add(dtColID);
DataColumn dtColName = new DataColumn("Name");
dtColName.DataType = System.Type.GetType("System.String");
dtSource.Columns.Add(dtColName);
DataColumn dtColCode = new DataColumn("Code");
dtColCode.DataType = System.Type.GetType("System.String");
dtSource.Columns.Add(dtColCode);
//Add rows
DataRow row = dtSource.NewRow();
row[dtColID] = "1";
row[dtColName] = "Vijay";
row[dtColCode] = "1001";
dtSource.Rows.Add(row);
//Add rows
row = dtSource.NewRow();
row[dtColID] = "2";
row[dtColName] = "Ajay";
row[dtColCode] = "1002";
dtSource.Rows.Add(row);
return dtSource;
}