2009-08-27 16 views
4

DataGridViewのセルを操作するときは、あなたが通常の操作を行います。DataGridView列名に安全にアクセスするにはどうすればよいですか?

MyGrid.CurrentRow.Cells["EmployeeFirstName"].Value = "John"; 

すべての罰金とダンディですが、複雑さが上昇すると、あなたはスペルミスの心配開始され、リファクタリングの問題など

歴史的に、私はちょうど作られましたクラスのインスタンスに直接アクセスすることができるように公開されていますが、Windows Formsデザイナーと戦わなければなりません。

public static class Cols 
{ 
    public static string EmployeeFirstName = "EmployeeFirstName"; 
    ... 
} 

この中で結果:待っているとは対照的に、

MyGrid.CurrentRow.Cells[Cols.EmployeeFirstName].Value = "John"; 

これは私にいくつかのIntelliSense良さを与える

私の現在のソリューションは、文字列の束と、Colsはというクラスを持つことです実行時エラーが発生しました。しかし、まだ漠然としているようだ。

これを行うさらに便利な方法はありますか?あなたのようにあなたの列にアクセスするためにインデックスを使用することができます

答えて

-2

:[1] .Valueの= "ジョン"

MyGrid.CurrentRow.Cells。

+3

これはどのように保存されますか?もし列のインデックスが変わってしまったら、あなたはうんざりしています... – Colin

6

デザイン時に列を作成した場合は、その列にemployeeFirstNameColumnなどのわかりやすい名前を付けることができます。多分

MyGrid.CurrentRow.Columns[employeeFirstNameColumn.Name] 

か::

次に、あなたのようなものを用いた細胞を取得することができますが、動的に列を生成している場合

MyGrid.CurrentRow.Columns[employeeFirstNameColumn.Index] 

を(=真AutoGenerateColumns)は、あなたが持っているでしょうバインドしているデータソースの列インデックスに基づいて列インデックスを作成します。したがって、インデックスを派生させるために同様のトリックを使用することができます(特に、データソースが厳密に型指定されたDataSetの場合)。

+0

私はちょっと読んできましたが、私は両方の方法で "すべてのメンバーは私的です"という行動を遵守したいと思っています。 Windowsフォームデザイナーは、私は実際にフォームを使用するクラスインスタンスへのフルアクセスを望んでいます。 それはそれを取るか、それを残す、私は思います。あなたのアイデアをありがとう。 – Teetow

+0

これは古い質問ですが、['DataGridViewRow'](http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrow%28v=)というメモを追加したいだけです。 vs.100%29.aspx)( 'MyGridによって返される型。CurrentRow')は実際には '.Columns'プロパティを持っていません。答えは '.Cells'を参照していると思います。 –

0

ランタイムの問題を防ぐ唯一の方法は、存在しないCellsアイテムにアクセスしようとするときにArgumentExceptionをキャッチすることです。たとえば:あなたは何ができるか

private void SetCellValue(DataGridViewCellCollection cells, string col, object value) 
{ 
    try 
    { 
    cells[col].Value = value; 
    } 
    catch (Exception ex) 
    { 
    Console.WriteLine(string.Format("Failed to set cell {0} to {1} Error={2}",col,value,ex.Message)); 
    } 
} 
1

この

for (int x = 0;x <tbl.Rows.Count;x++)//iterate through tables 
     { 
      Dataset.TableNameRow record = tbl[x]; 
      dataGridView1.Rows.Add(); 
      dataGridView1[colHandoffDate.Name,x].Value = record.HandoffDate; 
      .... 

である私は、手動で列を追加しましたので、あなたはインテリセンスでそれらを見つけると自分の名前を使用することができます(この方法は、あなたが作成する必要はありません文字列を含むクラス)

関連する問題