0

私は10x10のテキストボックス(100個)を持っています。テキストファイルに書き込むためにこのコードを書きます:

foreach (Control control in Panel1.Controls)
             {


                 var textBox = control as TextBox;
                 if (textBox != null)
                 {
                     if (string.IsNullOrEmpty(textBox.Text)) // ignore this
                     {

                         textBox.Style["visibility"] = "hidden";
                     }
                     textBox.Enabled = false;

                     if (numberofCommas > 8)
                     {
                         stringWriter.Write(textBox.Text);
                         numberofCommas = 0;
                     }
                     else
                     {
                        stringWriter.Write("," + textBox.Text );
                        numberofCommas++;
                         recordsWritten++;
                     }

                     if (recordsWritten == 10)
                     {
                         stringWriter.WriteLine();
                         recordsWritten = 0;
                     }
                     else
                     {

                     }

上記から、テキスト ファイルに 9 個のコンマの 10 行が必要ですが、代わりにテキスト ファイルに 10 個のコンマの 9 行が必要です。私のコード ロジックは間違っていますか? 何時間も探していたので、まだ解決できませんでした。私の論理が悪い場合は申し訳ありませんが、私はプログラミングが初めてです。

4

2 に答える 2

1

100 個の TextBox オブジェクトを使用することはお勧めしません。10 行と 10 列の DataTable にバインドされた DataGridView を使用できます。データを編集してファイルに保存することもできます。

以下のコードを試してください

    StringWriter stringWriter1 = new StringWriter();
    DataTable dataTable1 = new DataTable();

    private void Form1_Shown(object sender, EventArgs e)
    {
        dataGridView1.AllowUserToAddRows = false;

        int i;

        for (i = 0; i < 10; i++)
        {
            dataTable1.Columns.Add("Column" + (i + 1), typeof(string));
        }

        for (i = 0; i < 10; i++)
        {
            DataRow dataRow1 = dataTable1.NewRow();
            dataTable1.Rows.Add(dataRow1);
        }

        dataGridView1.DataSource = dataTable1;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string rowString = "";

        int i,j;

        for (i = 0; i < 10; i++)
        {
            rowString = "";

            for (j = 0; j < 10; j++)
            {
                if (dataTable1.Rows[i][j].ToString().Contains(",") == true)
                {
                    //Enclosing the field data inside quotes so that it can
                    //be identified as a single entity.
                    rowString += "\"" + dataTable1.Rows[i][j] + "\"" + ",";
                }
                else
                {
                    rowString += dataTable1.Rows[i][j] + ",";
                }
            }

            rowString = rowString.Substring(0, rowString.Length - 1);
            stringWriter1.WriteLine(rowString);
        }
    }

フォームに DataGridView を追加するだけです。

于 2013-06-26T09:03:27.083 に答える
1

recordsWritten最後のステップでインクリメントする必要があると思います:

if (numberofCommas > 8)
{
     stringWriter.Write(textBox.Text);
     numberofCommas = 0;
     recordsWritten++;
}

Linq を使用してそれを行うより良い方法を次に示します。

var textBoxes = Panel1.Controls.OfType<TextBox>().Select((t, i) => new { TextBox = t, Index = i }).ToList();
foreach (var tb in textBoxes)
{
    if (string.IsNullOrEmpty(tb.TextBox.Text))
        tb.TextBox.Style["visibility"] = "hidden";
    tb.TextBox.Enabled = false;
}

foreach (var line in textBoxes.GroupBy(e => e.Index / 10)
                        .Select(e => 
                            string.Join(", ", 
                                e.Select(a => a.TextBox.Text).ToArray())))
    stringWriter.WriteLine(line);
于 2013-06-26T07:47:14.717 に答える