2016-06-11 4 views
-1

謝罪。私はStackOverflowを初めて使用していて、コード例でどのように対応するのか分からなかった。以下のコードは、データグリッドビューのテーブルからすべての行をマージフィールドを持つワードドキュメントにエクスポートするためのコードです。現時点では、以下のコードはドキュメント内の最初の行のみを繰り返し、残りの行は表示しません。誰かがこれを書いた方法では不可能かもしれないと言いました。私はそれがどうなるか知っている。DataGridViewの行をWordテンプレートにエクスポート/マージする

ます。private void btnMerge_Click(オブジェクト送信者、EventArgsの電子) {

 var application = new Microsoft.Office.Interop.Word.Application(); 
     var document = new Microsoft.Office.Interop.Word.Document(); 

     document = application.Documents.Add(Template: @"C:\Users\euan\documents\agreementtemplate.docx"); 
     application.Visible = true; 

     for (int i = 0; i < gvCurrentAgreements.Rows.Count; i++) 
     { 
      var griddescripton = gvCurrentAgreements.Rows[i].Cells[2].Value.ToString(); 
      var gridprice = gvCurrentAgreements.Rows[i].Cells[4].Value.ToString(); 
      var gridquantity = Convert.ToString(gvCurrentAgreements.Rows[i].Cells[3].Value); 

      foreach (Microsoft.Office.Interop.Word.Field field in document.Fields) 
       if (field.Code.Text.Contains("Description")) 
       { 

        field.Select(); 
        application.Selection.TypeText(griddescripton); 
       } 
       else if (field.Code.Text.Contains("Price")) 
       { 

        field.Select(); 
        application.Selection.TypeText(gridprice); 
       } 
       else if (field.Code.Text.Contains("Quanitity")) 
       { 

        field.Select(); 
        application.Selection.TypeText(gridquantity.ToString()); 
       } 
     } 
    } 
+0

そして、正確に、あなたの質問は何ですが?質問の下にある[編集]リンクを使用してANDを追加し、コードブロックをコードブロックとして読み取れるように修正してください。 –

答えて

0

あなたの問題は単純ですが、時には我々はバックステップと、我々は何が起こっているかを見ることができる前に休憩を取る必要があります。変数をループの外に割り当てています。これをループの内側で実行し、行iを取得し、現在の行を取得する必要があります。

for (int i = 0; i < gvCurrentAgreements.Rows.Count; i++) 
{ 
    griddescripton = gvCurrentAgreements.Rows[i].Cells[2].Value.ToString(); 
    gridprice = gvCurrentAgreements.Rows[i].Cells[4].Value.ToString(); 
    gridquantity = Convert.ToString(gvCurrentAgreements.Rows[i].Cells[3].Value); 
    //...etc. 

しかし、あなたは、グリッドをデータバインドされている場合、私はグリッドを直接操作する上でのデータ・ソースを使用して好むだろう。

+0

両方の提案を試しても同じことをしています。最初の行が文書上で繰り返されます。ステッピングからデバッグまで、foreachループを繰り返して終了します。テンプレートに残っているフィールドがなくなると、forループがインクリメントされます。 –

+0

グリッド内のすべての行に同じデータがある場合を除き、これは不可能です。表示されているようにコードを実装していない可能性が高いあなたのコードが今のように表示されるように、あなたの質問に更新を加えることができますか? – Crowcoder

0
あなただけの各行の値を割り当てる必要があり

... 
for (int i = 0; i < gvCurrentAgreements.Rows.Count; i++) 
{ 
    var griddescripton = gvCurrentAgreements.Rows[i].Cells[2].Value.ToString(); 
    var gridprice = gvCurrentAgreements.Rows[i].Cells[4].Value.ToString(); 
    var gridquantity = Convert.ToString(gvCurrentAgreements.Rows[i].Cells[3].Value); 

    foreach (Microsoft.Office.Interop.Word.Field field in document.Fields) 
    if (field.Code.Text.Contains("Description")) 
    // etc 
関連する問題