2017-03-02 14 views
1

テキストファイルにエクスポートできるデータグリッドを持っていますが、DataGridViewのすべての列をエクスポートする必要はありません。選択することができませんテキストファイルに行くべき列は、ここで私は、それが第二forループでifステートメントを追加するのに十分だとあなたはしたくないそれらの列を迂回し、あなたの現在のコードを修正するには、今データグリッドからテキストファイルに特定の列を選択する方法

StreamWriter sW = new StreamWriter("MyPathFile.txt"); 
string lines = ""; 
for (int i = 0; i < dataGridProducts.RowCount; i++) 
{ 
    for (int col = 0; col < dataGridProducts.ColumnCount; col++) 
    { 
     lines += (string.IsNullOrEmpty(rader) ? ";" : ";") + 
      dataGridProducts.Rows[i].Cells[col].Value?.ToString(); 
    } 
} 
sW.WriteLine(rader); 
sW.Close(); 
MessageBox.Show("The file is now exported"); 
+0

あなたはよりエレガントなLINQを使用してそれを行うことができます。しかし、現在のコードを修正するには、 'if'文を2回目の' for'ループに追加し、望ましくない列をバイパスするだけで十分です。たとえば 'if(col == 1 || col == 3)continue; '。 –

+0

@RezaAghaeiありがとうございますが、うまくいきません。 –

+0

カラムを正しくバイパスするための基準を適用していない可能性があります。本当にシンプルで、例は必要ないと思います。とにかくselectiongの値としてlinqを使い、 'System.IO.File'を使うには、例を含む答えを追加しました。 –

答えて

0

持っているものです例if(col==1 || col==3) continue;。ここ

また、所望の列を選択してSystem.IO.Fileを使用してファイルに保存するlinqを使用して別のオプションです:

var columns = new int[] { 0, 2 }; /* desired column indexes*/ 
var rows = dgv.Rows.Cast<DataGridViewRow>().Where(r => !r.IsNewRow) 
    .Select(r => columns.Select(c => string.Format("{0}", r.Cells[c].Value))); 
var headers = string.Join(";", columns.Select(i => dgv.Columns[i].HeaderText)); 
var lines = rows.Select(x => string.Join(";", x)).ToList(); 
lines.Insert(0, headers); 
System.IO.File.WriteAllLines(@"d:\file.txt", lines); 
+0

私はどのように意味するのかを示すことができますが、forループのif文はうまくいきません。 –

+0

あなたのコードで使用しているような文字列連結を使用するのは興味がありません。また、単純なテキストファイルを保存するために 'StreamWriter'を使うことに興味はありません。私は現在の答えがはるかに優れていると信じているので、私は答えに触れない方が好きです。あなたが解決策を適用する際に問題がある場合はそれを試してみてください:) –

+0

私はそれを試して、それが私が望むように正確に動作しますが、これはあなたのコードにこの文字列を入れる場所がわかりませんテキストファイル sW.WriteLine( "レスポンス;製品;顧客;予算;"); –

関連する問題