2012-01-14 3 views
1

私は単純なデータグリッドを持っており、リスト変数の内容を表示しています。私はそれに関連する2つのボタンを持っています.1つはリスト変数に内容を追加し、もう1つはデータグリッドをリフレッシュし、もう1つはそれを削除してリフレッシュするためです。DataGridがインデックスを取得する-1選択された行が変更されたときに値を持たない

オブジェクトを問題なく追加できますが、選択した行を変更すると「インデックス-1に値がありません」というエラーが表示されます。理由は分かりません。次のように

データグリッドを設定するためのコードは次のとおりです。allTravellersは、私は上記の話をされたリストがある

allTravellersDataGrid.DataSource = allTravellers; 

次のようにallTravellersリストにコンテンツを追加するためのボタンがある:

private void addAttendee_Click(object sender, EventArgs e) 
    { 
     if (attendeeName.Text == "" || attendeeSurname.Text == "" || attendeeBirthDate.Text == "" || attendeeIdNumber.Text == "") 
     { MessageBox.Show("Not all information regarding the attendee entered"); } 
     else 
     { 
      allTravellers.Add(dt.prepareTraveller(attendeeName.Text, attendeeSurname.Text, attendeeBirthDate.Text, attendeeIdNumber.Text)); 
      allTravellersDataGrid.DataSource = null; 
      allTravellersDataGrid.DataSource = allTravellers; 
      allTravellersDataGrid.Refresh(); 
     } 
    } 

と最後で、リストからオブジェクトを除去するためのボタンのコードは次のようになります。

private void removeAttendee_Click(object sender, EventArgs e) 
    { 
     traveller travellerToRemove = (traveller)allTravellersDataGrid.CurrentRow.DataBoundItem; 
     allTravellers.Remove(travellerToRemove); 
     allTravellersDataGrid.Refresh(); 
    } 

ですインデックス問題を引き起こしているものを見つけ出すのに私のように無力ではない誰かがここにいますか?

ありがとうございました。

+2

https://www.google.com/:

はattendeeName という名前 テキストボックスを持つフォームはこの作品allTravellersDataGrid

という名前removeBtn グリッドという名前addBtn 削除ボタンという名前のボタンを追加したとし検索は?sourceid = chrome&ie = UTF-8&q =インデックス+ -1 + does + not + have + a + value + C%23#pq = index + -1 + does + not + have + a + value + c%23&hl = en&sugexp = pfwl&tok = vGTaR7u2DyGSuxPKL_bFXA&cp = 32&gs_id = k&xhr = t&q =%22Index + -1 +は+ a +値を22 + C%23&pf = p&sclient = psy-ab&source = hp&pbx = 1&oq =%22Index + -1 +は、+ a +値+ 22 + C%23&aq = f&aqi =&aql =&gs_sm =&gs_upl =&bav = on.2、または.r_gc.r_pw.r_cp。、cf.osb&fp = 76147c48b2eb760f&biw = 1920&bih = 943 –

+0

ありがとう、これは助けます – Ondrej

+0

グリッドのインデックス変更のイベントはありますか?その場合は、コードを投稿してください。 –

答えて

0

このエラーが発生した場合、あなたは現在選択されているアイテムにはいないと思われます。項目が選択されていないリストコントロールには、 '-1'が表示されます。それを削除しようとする前に有効な項目をチェックすると、おそらく問題が解決されます。

私はBindingListも使用しましたが、あなたにどのような違いがあるのか​​はっきりしていません。

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 
using StackOverFlowWinForms.Model; 

namespace StackOverFlowWinForms 
{ 
public partial class Form1 : Form 
{ 
    private BindingList<Traveller> _allTravellers = new BindingList<Traveller>(); 
    public BindingList<Traveller> allTravellers { get { return _allTravellers; } } 

    public Form1() 
    { 
     InitializeComponent(); 

     allTravellers.Add(new Traveller("Fred")); 
     allTravellers.Add(new Traveller("George")); 
     allTravellers.Add(new Traveller("Sam")); 
     allTravellers.Add(new Traveller("Mary")); 

     this.allTravellersDataGrid.DataSource = allTravellers; 

    } 

    private void addBtn_Click(object sender, EventArgs e) 
    { 
     if (attendeeName.Text == "") 
     { MessageBox.Show("Not all information regarding the attendee entered"); } 
     else 
     { 
      allTravellers.Add(new Traveller(attendeeName.Text)); 
     } 

    } 

    private void removeBtn_Click(object sender, EventArgs e) 
    { 
     if (allTravellersDataGrid.CurrentRow != null) 
     { 
      Traveller travellerToRemove = (Traveller)allTravellersDataGrid.CurrentRow.DataBoundItem; 
      allTravellers.Remove(travellerToRemove); 

     } 

    } 
} 
} 

using System; 
using System.ComponentModel; 

namespace StackOverFlowWinForms.Model 
{ 
public class Traveller 

{ 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    #endregion 

    private string _attendeeName; 
    public string attendeeName 
    { 
     get 
     { 
      return _attendeeName; 
     } 
     set 
     { 
      _attendeeName = value; 
      NotifyPropertyChanged("attendeeName"); 
     } 
    } 


    public Traveller() 
    { 
     this.attendeeName = "Unknown"; 
    } 
    public Traveller(string name) 
    { 
     this.attendeeName = name; 
    } 
} 
} 
関連する問題