2011-10-27 43 views
8

Có cách nào để thêm điều khiển (ví dụ: nút) vào ô DataGridView Winforms trong C# không?Thêm nút vào một Winforms DataGridView

(Những gì tôi đang hướng tới là đưa các loại điều khiển trong các tế bào khác nhau của lưới điện ...)

+0

http://stackoverflow.com/questions/6085930/add-button-column-in-a-databound-datagridview –

Trả lời

6

bạn có thể làm như thế này ....

Có hai cách để làm điều này:

  • 1). Truyền một DataGridViewCell tới một loại ô nào đó tồn tại. Ví dụ , chuyển đổi một DataGridViewTextBoxCell thành loại DataGridViewComboBoxCell.
  • 2). Tạo một điều khiển và thêm nó vào bộ sưu tập điều khiển của DataGridView, thiết lập vị trí và kích thước của nó để phù hợp với ô được lưu trữ.

Xem mã mẫu của tôi bên dưới minh họa các thủ thuật.

Code Snippet

private void Form5_Load(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("name"); 
     for (int j = 0; j < 10; j++) 
     { 
      dt.Rows.Add(""); 
     } 
     this.dataGridView1.DataSource = dt; 
     this.dataGridView1.Columns[0].Width = 200; 

     /* 
     * First method : Convert to an existed cell type such ComboBox cell,etc 
     */ 

     DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell(); 
     ComboBoxCell.Items.AddRange(new string[] { "aaa","bbb","ccc" }); 
     this.dataGridView1[0, 0] = ComboBoxCell; 
     this.dataGridView1[0, 0].Value = "bbb"; 

     DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell(); 
     this.dataGridView1[0, 1] = TextBoxCell; 
     this.dataGridView1[0, 1].Value = "some text"; 

     DataGridViewCheckBoxCell CheckBoxCell = new DataGridViewCheckBoxCell(); 
     CheckBoxCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; 
     this.dataGridView1[0, 2] = CheckBoxCell; 
     this.dataGridView1[0, 2].Value = true; 

     /* 
     * Second method : Add control to the host in the cell 
     */ 
     DateTimePicker dtp = new DateTimePicker(); 
     dtp.Value = DateTime.Now.AddDays(-10); 
     //add DateTimePicker into the control collection of the DataGridView 
     this.dataGridView1.Controls.Add(dtp); 
     //set its location and size to fit the cell 
     dtp.Location = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Location; 
     dtp.Size = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Size; 
    } 
+1

Trong khi phương pháp thứ hai hiển thị điều khiển, nó vẫn tĩnh khi các ô được cuộn - có cách nào để khóa điều khiển mới vào ô bên dưới không? – CrazyHorse

+0

Phương pháp đầu tiên hoạt động tốt, phương pháp thứ hai gây ra sự kiểm soát "rơi ra" của lưới khi cuộn. Tôi đoán bạn có thể sử dụng sự kiện định dạng để di chuyển nó trở lại. –

6

Các DataGridViewButtonColumn là một loại cột được cung cấp có chứa một nút bấm. Bạn có thể thêm các điều khiển của riêng bạn để các tế bào:

http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

Ghi nhớ nó không phải lúc nào cũng tầm thường, nhưng tôi đã thấy một người nào đó đặt toàn bộ một DataGridView vào một tế bào - nhìn lạ.

Ngoài ra còn có các cột được cung cấp khác:

DataGridViewButtonColumn 
DataGridViewCheckBoxColumn 
DataGridViewComboBoxColumn 
DataGridViewImageColumn 
DataGridViewLinkColumn 
DataGridViewTextBoxColumn 

Bạn có thể thay đổi các trong trình soạn thảo cột trong nhà thiết kế trong Visual Studio, hoặc thêm chúng trong mã để bộ sưu tập Cột.

+0

Ah , vì vậy bạn đang nói rằng tôi có thể thêm bất kỳ loại kiểm soát vào một DataGridViewButtonColumn? Khi tôi vấp phải điều này, tôi nghĩ rằng đó là một cột đầy các nút ;-) – Boris

+0

@Boris Không với cột Button, bạn có thể tạo một kiểu cột lưu trữ bất kỳ điều khiển nào và thêm loại cột đó vào lưới. Ví dụ: bạn có thể tạo một DataGridViewNumericUpDownColumn lưu trữ một điều khiển NumericUpDown. Cột được mã hóa để lưu trữ một loại điều khiển cụ thể, nó không phải là một quyết định thời gian chạy. –

+0

Nhưng tôi nghĩ rằng vẫn còn một sự hiểu lầm: Với cách tiếp cận này, liệu toàn bộ cột có được cùng một loại điều khiển không? Bởi vì điều tôi muốn có là một loại kiểm soát khác trong mọi tế bào. – Boris

-1

tôi sẽ thêm nó vào nhà thiết kế và thực hiện một trường mẫu. Cách dễ dàng để đi và đặt bất cứ điều gì bạn muốn trong datagridview

Ví dụ

<asp:DataGrid ID="somedatagrid" runat="server"> 
    <Columns> 
     <asp:TemplateColumn> 
      <ItemTemplate> 
       <asp:Button ID="somebutton" runat="server" Text="some button" /> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:DataGrid> 
+0

Thật không may là câu hỏi về winforms, chứ không phải các trang web .NET. – Zorgarath

Các vấn đề liên quan