2009-09-02 32 views
5

Tôi muốn thực hiện một đầu vào datagridview được sắp xếp. Đoạn mã sau đây không hoàn toàn cắt nó; ngay cả khi tôi đặt một grd.Refresh, các datagridview không hiển thị giá trị cập nhật của nó. Nếu tôi bấm phím mũi tên xuống và đi lên một lần nữa, lưới là làm mới. Có cách nào khác tôi có thể buộc làm mới nội dung của datagridview?Làm cách nào để buộc làm mới nội dung của DataGridView?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace TestSortedInput 
{ 
    public partial class Form1 : Form 
    { 
     DataTable _dt = new DataTable(); 

     public Form1() 
     { 
      InitializeComponent(); 

      grd.AllowUserToAddRows = false; 

      _dt.Columns.Add("sort", typeof(int)); 
      _dt.Columns.Add("product", typeof(string)); 

      _dt.DefaultView.Sort = "sort"; 

      grd.DataSource = _dt; 
     } 

     private void dataGridView1_KeyUp(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Insert) 
      {     
       if (e.Modifiers == 0) 
       { 
        var r = _dt.NewRow(); 
        r["sort"] = _dt.DefaultView.Count + 1; 
        r["product"] = ""; 

        _dt.Rows.Add(r); 
       } 
       else if (e.Alt) 
       { 
        var drv = this.BindingContext[_dt].Current as DataRowView; 

        int sort = (int)drv["sort"]; 

        for (int i = _dt.DefaultView.Count - 1; i >= (int)drv["sort"] - 1; --i) 
        {       
         _dt.DefaultView[i]["sort"] = (int) _dt.DefaultView[i]["sort"] + 1;       
        } 

        var r = _dt.NewRow(); 
        r["sort"] = sort; 

        _dt.Rows.Add(r); 

        grd.Refresh(); 
       } 
      } 
     }//void 
    } 
} 

Trả lời

9

thay

grd.Refresh(); 

bởi

drv.EndEdit(); 

hàng được lựa chọn là trong chế độ chỉnh sửa, bạn phải kết thúc nó cho sắp xếp để diễn ra.

+0

điều này đã giải quyết được sự cố của tôi. wow, tôi thực sự bỏ qua điều đó (drv.EndEdit), đoán tôi quen với việc không gọi .EndEdit, nó được tự động hóa trong Form được phân lớp của tôi. cảm ơn rất nhiều^_ ^ – Hao

1

Bạn đã thử sử dụng một BindingSource với nguồn là dữ liệu có thể định vị được không, và sau đó gọi phương thức ResetBindings của BindingSource?

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