2014-09-30 9 views
6

Nếu bạn chỉ định AllowUserToAddRows trong biểu mẫu thắng DataGridView, người dùng có thể thêm hàng mới theo cách thủ công trong lưới. Bây giờ tôi muốn thêm một nút hình ảnh trong một cột cũng sẽ được hiển thị trong hàng mới. Nhưng tôi không thể làm cho nó hiển thị hình ảnh, chỉ có hình ảnh chữ thập đỏ được hiển thị như thể nó không được tìm thấy.Thay thế "chữ thập đỏ" trong DataGridViewImageColumn của "hàng mới" bằng hình ảnh tùy chỉnh

Dưới đây là một ảnh chụp màn hình của lưới điện với hình ảnh gây phiền nhiễu:

enter image description here

Những hình ảnh tôi muốn thể hiện là trong Properties.Resources.Assign_OneToMany.

Tôi đã tìm kiếm khắp nơi và thử nhiều cách tương tự (trong constructor):

var assignChargeColumn = (DataGridViewImageColumn)this.GrdChargeArrivalPart.Columns["AssignCharge"]; 
assignChargeColumn.DefaultCellStyle.NullValue = null; 
assignChargeColumn.DefaultCellStyle.NullValue = Properties.Resources.Assign_OneToMany; 

hoặc

private void GrdChargeArrivalPart_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) 
{ 
    var grid = (DataGridView)sender; 
    DataGridViewRow row = grid.Rows[e.RowIndex]; 
    if (row.IsNewRow) 
    { 
     var imageCell = (DataGridViewImageCell) row.Cells["AssignCharge"]; 
     imageCell.Value = new Bitmap(1, 1); // or ...: 
     imageCell.Value = Properties.Resources.Assign_OneToMany; // or ...: 
     imageCell.Value = null; 
    } 
} 

Dĩ nhiên tôi cũng đã gán hình ảnh này trong cột thu của DataGridView trên nhà thiết kế:

enter image description here

Vậy cách đúng để xác định hình ảnh mặc định cho DataGridViewImageColumn được hiển thị ngay cả khi không có dữ liệu nhưng chỉ có hàng mới? Nếu có vấn đề, đây là jpg-image: enter image description here

+0

Ý của bạn là gì * hàng mới *? Ai đó thêm hàng mới. Sau đó thêm một số khác. Đó là hàng mới. Hiện tại hoặc cả hai (hiện tại và trước đó)? –

+0

@ γηράσκωδ'αείπολλάδιδασκόμε: 'DataGridViewRow' được thêm tự động nếu' AllowUserToAddRows' được đặt thành 'true'. Đó là hàng duy nhất trả về 'true' cho [' IsNewRow'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrow.isnewrow (v = vs.110) .aspx) (liên kết bên trong, từ MSDN: _ "một hàng dừng lại là hàng mới khi nhập dữ liệu vào hàng bắt đầu." _). Người dùng có thể chèn bản ghi bằng cách cung cấp tất cả các giá trị trực tiếp trong 'DataGridView'. Vì vậy, về cơ bản hàng này thay thế biểu mẫu. –

Trả lời

5

Bạn có thể đóng vai trò trong CellFormatting sự kiện:

private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    // ToDo: insert your own column index magic number 
    if (this.dgv.Rows[e.RowIndex].IsNewRow && e.ColumnIndex == 2) 
    { 
     e.Value = Properties.Resources.Assign_OneToMany; 
    } 

} 

enter image description here

Tôi tin rằng nó bỏ qua việc gán thuộc tính Hình ảnh của bạn trong trình chỉnh sửa cột vì đó hàng là Không có gì/Null để bắt đầu.

+1

Chà, nó đã hoạt động rồi. Hãy để tôi có một câu trả lời khác. Cảm ơn bạn trước! –

2

Vẽ hình ảnh bằng tay bởi vì hệ thống rút mặc định một:

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
    { 
     if (e.ColumnIndex == 3 && e.RowIndex >= 0) //change 3 with your collumn index 
     { 
      e.Paint(e.CellBounds, DataGridViewPaintParts.All); 

      if (dataGridView1 .Rows [e.RowIndex].IsNewRow) 
      { 
       Bitmap bmp = Properties.Resources.myImage; 

       e.Graphics.DrawImage(bmp, e.CellBounds.Left + e.CellBounds.Width/2 - 
       bmp.Width/2, e.CellBounds.Top + e.CellBounds.Height/2 - 
       bmp.Height/2, bmp.Width, bmp.Height); 
      } 

      e.Handled = true; 
     } 
    } 
+0

Điều này không bao giờ đi vào bên trong 'if' để kiểm tra' IsNewRow'. Tôi cũng không thích vẽ hình ảnh của mình theo cách thủ công. Tuy nhiên, cảm ơn bạn rất nhiều vì những nỗ lực của bạn (+1). –

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