2

こんにちは、私の質問をより適切に作成します。

foreachコマンドで、配列内のtemp(変数の保存)値を取得します。tempに保存する値は、datagridviewセルからのものです。

次のステップのforコマンドで、文字列と次の文字列の2つの文字列を比較します。最初の文字列が2番目の文字列よりも大きい場合は、それらの位置を変更します。しかし、問題があります。彼らは位置を変えず、空の値を取得します。なぜ彼らが空の値を取得するのか理解できません。

foreachコマンドのために空の値を取得すると思っているので、インデックス[i]は同じままですが、i = i + 1とすると、コマンドは範囲外になります。

ありがとうございました

senc。ニコ

foreach (DataGridViewRow row in dataGridView1.Rows)     
{
    if (row.Cells[i].Value == null)
    {
        //MessageBox.Show("This row is empty");
        break;
    }
    if (row.Cells[i].Value != null)
    {
        temp = row.Cells[i].Value.ToString();
        UnsortArray[i] = temp;
        i = i + 1;

    }
}

for (int a = 0; a < MaxZeilen; a++)
{
    if (i < MaxZeilen)
    {
        *if (String.Compare(UnsortArray[a], UnsortArray[a + 1]) > 0) 
        {
            UnsortArray[a] = temp;
            UnsortArray[a + 1] = temp2;
            temp = UnsortArray[a + 1];
            temp2 = UnsortArray[a];
        }*
    }
}

for (int i = 0; i < MaxZeilen; i++)
{
    UnsortArray[i] = SortArray[i];
    MessageBox.Show(UnsortArray[i]);
}
4

7 に答える 7

1
    List<String> itemList = new List<string>();
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.Cells[0].Value = null)
        {
            itemList.Add(row.Cells[0].Value.ToString());
        }
    }

    itemList.Sort();
    string[] SortedArray = itemList.ToArray();

    for (int j = 0; j < SortedArray.Length; j++)
    {
        MessageBox.Show(SortedArray[j]);
    }

このコードが機能しない場合は、追加するよりも

foreach(string item in itemList)
{
    MessageBox.Show(item);
}

最初のforeachループの後、値を確認します

于 2012-09-24T13:44:59.170 に答える
1
int MaxArrayCount = 0; 
foreach(DataGridViewRow row in dataGridView1.Rows)    
{ 
MaxArrayCount += row.Cells.Count;
 }
 string[] UnsortArray= new string[MaxArrayCount];



int cnt = 0;
foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    for (int i = 0; i < row.Cells.Count; i++ )
                    {
                        if (row.Cells[i].Value != null)
                        {
                            temp = row.Cells[i].Value.ToString();

                            UnsortArray[cnt] = temp;

                            cnt++;
                        } 
                    }

                }



for (int b = 1; b < UnsortArray.Count; b++)
{    
  for (int a = 0; a < UnsortArray.Count - 1; a++)   
     {    

    if (String.Compare(UnsortArray[a], UnsortArray[a + 1]) > 0)
     {

      temp = UnsortArray[a + 1];

      UnsortArray[a + 1] = UnsortArray[a];

      UnsortArray[a] = temp;

    }    
  }    
}


for (int i = 0; i < MaxZeilen; i++)
{
MessageBox.Show(UnsortArray[i]);
}
于 2012-09-25T06:21:32.990 に答える
1

逆に、一時変数を割り当てる前に配列を一時変数に割り当てます。

UnsortArray[a] = temp;
UnsortArray[a + 1] = temp2;
temp = UnsortArray[a + 1];
temp2 = UnsortArray[a];

試す:

temp = UnsortArray[a + 1];
temp2 = UnsortArray[a];
UnsortArray[a] = temp;
UnsortArray[a + 1] = temp2;

そして、あなたはここでそれをやり直しましたUnsortArray[i] = SortArray[i];。私はあなたが意味すると思いますSortArray[i] = UnsortArray[i];

于 2012-09-24T12:46:16.233 に答える
1
    temp = UnsortArray[a + 1];    

    UnsortArray[a + 1] = UnsortArray[a];

    UnsortArray[a] = temp;

それ以外の

          UnsortArray[a] = temp;

          UnsortArray[a + 1] = temp2;

          temp = UnsortArray[a + 1];

          temp2 = UnsortArray[a];
于 2012-09-24T13:04:42.017 に答える
1

次のコードブロックに置き換えます

int i= 0;
foreach (DataGridViewRow row in dataGridView1.Rows)     
{
    if (row != null)
    {
        temp = row.ToString();
        UnsortArray[i] = temp;
        i = i + 1;
    }
}


for (int a = 0; a < MaxZeilen; a++)
{
    if (String.Compare(UnsortArray[a], UnsortArray[a + 1]) > 0) 
    {
        temp = UnsortArray[a + 1];             
        UnsortArray[a + 1] = UnsortArray[a];
        UnsortArray[a] = temp;
    }
}
for (int i = 0; i < MaxZeilen; i++)
{
    MessageBox.Show(UnsortArray[i]);
}
于 2012-09-24T13:02:50.147 に答える
1

List ではなく配列を使用する理由

このページでは、リストの並べ替えについて説明します。

于 2012-09-24T13:10:56.077 に答える
1

コードの改善点を次に示します。無限ループを引き起こし、単に Array.Sort メソッドを使用する可能性があるエラーが上部にありました。別の方法で並べ替える場合は、IComparable インターフェイスを追加します。

foreach (DataGridViewRow row in dataGridView1.Rows)     
{
     if (row.Cells[i].Value == null)
     {
          //MessageBox.Show("This row is empty");
          i++;
          break;
     }
     else (row.Cells[i].Value != null)
     {
          UnsortArray[i] = row.Cells[i].Value.ToString();
          i++;
     }
}  

Array.Sort(UnsortArray);
SortArray = UnsortArray;
于 2012-09-24T13:23:23.850 に答える