2009-09-02 35 views
5

ソートされたDataGridview入力を作成します。次のコードスニペットではそれをカットしていません。たとえ私がgrd.Refreshを置いても、datagridviewは更新された値を表示しません。矢印キーを押してもう一度上がると、グリッドがリフレッシュされます。 datagridviewのコンテンツを強制的にリフレッシュできる他の方法はありますか?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 
    } 
} 

答えて

9

drv.EndEdit(); 

によって

grd.Refresh(); 

を交換する選択された行は、あなたが場所を取るための並べ替えのためにそれを終了する必要があり、編集モードです。

+0

これは私の問題を解決しました。うわー、私は本当にそれを見落とした(drv.EndEdit)、私は呼び出すことに慣れていないと思います.EndEdit、それは私のサブクラス化されたフォームで自動化されています。どうもありがとう^ _ ^ – Hao

1

BindingSourceをデータテーブルとして使用し、BindingSourceのResetBindingsメソッドを呼び出してみましたか?

関連する問題