Chắc các bạn cũng như mình khi làm việc với CSDL đều sử dụng DataGridView để hiển thị CSDL nhưng đôi khi các bạn lại muốn các cell bên trong DataGridView là những Combobox để ngừoi dùng có thể chọn những giá trị được hiển thị bên trong Combobox chứ không được nhập trực tiếp vào DataGridView. Điều này rất có lợi khi bạn muốn ràng buộc những giá trị được nhập vào DataGridView.
Sau một thời gian suy nghĩ và miệt mài làm việc cuối cùng mình cũng tìm được cách để tạo ra các combobox trong DataGridView.
1. Các hàm cần thiết
Các bạn hãy copy các hàm cần thiết sau vào Project
C#
internal static DataGridViewComboBoxColumn CreateComboboxColumn(String ColumnName, String HeaderText,
DataTable pTable, String ColumnNameDisplay)
{
DataGridViewComboBoxColumn objColumn = new DataGridViewComboBoxColumn();
objColumn.Name = ColumnName;
objColumn.HeaderText = HeaderText;
objColumn.DataPropertyName = ColumnName;
objColumn.DropDownWidth = 160;
objColumn.Width = 100;
objColumn.MaxDropDownItems = 10;
objColumn.FlatStyle = FlatStyle.Standard;
objColumn.DataSource = pTable;
objColumn.DisplayMember = ColumnNameDisplay;
return objColumn;
}
VB.Net
· Friend Shared Function CreateComboboxColumn(ByVal ColumnName As String, ByVal HeaderText As String,ByVal pTable As DataTable, ByVal ColumnNameDisplay As String) As DataGridViewComboBoxColumn
· Dim objColumn As New DataGridViewComboBoxColumn()
· objColumn.Name = ColumnName
· objColumn.HeaderText = HeaderText
· objColumn.DataPropertyName = ColumnName
· objColumn.DropDownWidth = 160
· objColumn.Width = 100
· objColumn.MaxDropDownItems = 10
· objColumn.FlatStyle = FlatStyle.Standard
· objColumn.DataSource = pTable
· objColumn.DisplayMember = ColumnNameDisplay
· Return objColumn
· End Function
2. Giải thích các tham số
ColumnName : Tên của column trong DataGridView
Headtext: Text sẽ hiện thị trên Header của Column
pTable : Đối tượng DataTable chứa cột giá trị cần add vào combobox
ColumnNameDisplay : tên của cột trong DataTable mà giá trị của cột sẽ được hiển thị trên ComboBox
3. Cách sử dụng
Ví dụ : Ta có một DataTable bên trong nó có cột “STT”.
Bây giờ ta muốn add lên DataGridView một combobox column : nó có tên là “STTSV”, phần hiển thị trên Header là “STTSV:. Column này sẽ lấy dữ liệu của cột STT trong DataTable
C#
· DataGridViewComboBoxColumn objCol = CreateComboboxColumn("STTSV", "STTSV", objDataTableDanhsach,"STT");
· dataGridView1.Columns.Add(objCol);
VB
Dim objCol As DataGridViewComboBoxColumn = CreateComboboxColumn("STTSV", "STTSV", objDataTableDanhsach, "STT")
dataGridView1.Columns.Add(objCol)
Nguồn bài viết:
Dngaz.com