2016-06-24 15 views
1

IEnumerableリストがあり、実行時にこのリストによってデータグリッドビューが供給されています。このリストで DataGridviewのカラムの値の型をCの文字列から文字列に変換する

i.e. datagridviewBindingSource.DataSource = myList; 
    datagridview.DataSource = datagridviewBindingSource; 

は、すべての列は、型「string」が、2つの列 「ステータス」「エリア」タイプ「シャアの値が含まれていです。

ステータス値= { 'O'、 'C​​'}(開閉)を有することができ、エリア インプロセス= { 'I' は、 'F'、 'R'}(値を持つことができ代わりに、Oの

オープン

閉じる代わりにC

の:ファイナル、

さて、実行時に、私が表示したい}受け取ります

は、インプロセスの代わりに、I

のように...

私はこれをやっている:

foreach (DataGridViewColumn c in dataGridView1.Columns) 
       { 
        if (c.HeaderText == "Status") 
        { 
         MessageBox.Show(c.ValueType.ToString()); 
         c.ValueType = typeof(string); 
        } 
       } 
       foreach (DataGridViewRow r in dataGridView1.Rows) 
       { 
        foreach (DataGridViewCell c in r.Cells) 
        { 
         if (c.Value == null) 
         { 
          c.Value = ""; 
         } 
         if (c.Value.GetType() == typeof(char)) 
         { 
          //c.ValueType = typeof(string); 
          if (c.Value.ToString() == "O") 
          { 
           c.Value = "Open"; 
          } 
         } 
        } 
       } 

プログラムがコンパイルされますが、実行時に画像に示すように、例外がスローされます。 enter image description here

何か助けていただければ幸いです。

私はDapperを使用してデータベースを照会しています。クラス "Area"と "Status"の列は、データベースのようにcharとして定義されています。アプリがクライアントマシンに配布されている間にそのデータ型を変更することは、私の選択肢ではありません。私はちょうど "フロントエンド"ロジックでそれを処理したいです。

+0

どの方法で 'foreach'ループが含まれていますか? –

+1

このコードを含むメソッド( 'GetData()')は、データベースからデータを取得し、それをフィルタリングするために使用され、コンストラクタから呼び出されます。 –

+0

forループを入力する前に、 'dataGridView1'にデータ(たとえば" O ")があることをどのように保証しますか? –

答えて

1

'O'の値を文字列の「開く」に置き換えようとしています。したがって、システムはエラーをスローしています。より良い方法は、その行に新しいセルを追加し、この文字列の値を割り当て、この新しいセルを目に見えるようにマークし、それをグリッドにバインドして、不可視としてマークすることです。そうすれば、元のchar値とグリッド内の文字列を表示することができます。

+0

それは素晴らしい考えです!このデータグリッドビューを使用する方法の1つは、Excelファイルでエクスポートすることです。そのため、新しいセルを追加して、エクスポート中に他のセルを除外します。 –

+0

素晴らしい!助けがあればそれを回答としてマークしてください! – Srikanth495

+0

申し訳ありませんが、私が実際に探しているのは、列の型を文字列に変換することです。または、セルを追加してエクスポート中にセルを除外することがあまり面倒ではありません。提案ありがとう。 –