0

DataGridViewからデータを取得してcsvファイルに書き込む次のコードがあります。csv ファイルには 5 つの列があります。ただし、選択したクライアントのデータのみをファイルに書き込む必要があり、クライアント名はコンボボックスから選択されます。以下のコードはすべてのデータグリッド値をファイルに書き込みますが、ClientName がコンボボックス値と等しい行のみを書き込みたいのですが、これを機能させることができません

  // inventory export 
        private void btnExportShareClass_Click( object sender, EventArgs e)
        {
            //SET GRID
            DataGridView gridIn ;
            string outputFile = Inv_Export_savePath.Text;

        gridIn = Inv_DataGrid;
        //VAR holding client combobox
        string Selected_Combo = Inv_ClientList_Export_Combobox.Text ;


        //test to see if the DataGridView has any rows
        if (gridIn.RowCount > 0)
        {
           string value = "";
           DataGridViewRow dr = new DataGridViewRow();
           StreamWriter swOut = new StreamWriter(outputFile);

           //write header rows to csv
           for (int i = 0; i <= gridIn.Columns.Count - 1; i++)
           {
              if (i > 0)
              {
                 swOut.Write(",");
              }
              swOut.Write(gridIn.Columns[i].HeaderText);
           }

           swOut.WriteLine();

           //write DataGridView rows to csv
           for (int j = 0; j <= gridIn.Rows.Count - 1; j++)
           {
              if (j > 0)
              {

                        swOut.WriteLine();

              }

              dr = gridIn.Rows[j];

              for (int i = 0; i <= gridIn.Columns.Count - 1; i++)
              {
                 if (i > 0)
                 {
                    swOut.Write(",");
                 }

                 value = dr.Cells[i].Value.ToString();
                 //replace comma's with spaces
                 value = value.Replace(',', ' ');
                 //replace embedded newlines with spaces
                 value = value.Replace(Environment.NewLine, " "); 

                 swOut.Write(value);
              }
           }
           swOut.Close();
        }

    }


         for (int i = 0; i <= gridIn.Columns.Count - 1; i++)
              {
                 if (i > 0)
                 {
                      gridIn.Rows[i].ToString().Contains(Inv_ClientList_Export_Combobox.Text );
                    swOut.Write(",");
                 }

                 value = dr.Cells[i].Value.ToString();
                 //replace comma's with spaces
                 value = value.Replace(',', ' ');
                 //replace embedded newlines with spaces
                 value = value.Replace(Environment.NewLine, " "); 

                 swOut.Write(value);
              }
4

1 に答える 1

1

あなたのコメントから、必要なフィルタリングを実行するには、単純な条件に依存する必要があるようです。ここに、コードの修正版があります。

//test to see if the DataGridView has any rows
if (gridIn.RowCount > 0)
{
    string value = "";
    DataGridViewRow dr = new DataGridViewRow();
    StreamWriter swOut = new StreamWriter(outputFile);

    //write header rows to csv
    for (int i = 0; i <= gridIn.Columns.Count - 1; i++)
    {
        if (i > 0)
        {
            swOut.Write(",");
        }
        swOut.Write(gridIn.Columns[i].HeaderText);
    }

    swOut.WriteLine();

    //write DataGridView rows to csv
    bool previousSkipped = false;
    for (int j = 0; j <= gridIn.Rows.Count - 1; j++)
    {
        if (j > 0 && !previousSkipped)
        {
            swOut.WriteLine();
        }

        dr = gridIn.Rows[j];

        for (int i = 0; i <= gridIn.Columns.Count - 1; i++)
        {
            if (dr.Cells[2].Value.ToString().ToLower().Contains(Selected_Combo.ToLower()))
            {
                if (i > 0)
                {
                    swOut.Write(",");
                }

                value = dr.Cells[i].Value.ToString();
                //replace comma's with spaces
                value = value.Replace(',', ' ');
                //replace embedded newlines with spaces
                value = value.Replace(Environment.NewLine, " ");

                swOut.Write(value);
                previousSkipped = false;
            }
            else
            {
                previousSkipped = true; //To avoid using swOut.WriteLine(); more than required
            }
        }
    }
    swOut.Close();
}

このコードは、指定された行の 3 番目の列 (インデックス 2) の値が変数の内容と等しいかどうかを、Selected_Combo大文字を無視してチェックします (両方の文字列の比較ToLower())。この条件を満たす場合にのみ、指定されたセルをファイルに書き込みます。

于 2013-08-18T11:54:27.000 に答える