1

datagridviewを使用して、行全体を1つだけ選択できる次のコードがあります。"Variable.addModArray[i]"はstring[]です。

class Variables
{
    public static string[] addModArray;
}

int i = 0;
while (i < dgv.SelectedRows.Count)
{
    if (dgv.SelectedRows[0].Cells[i].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].Value.ToString(); //gets error
    i++;
}

コードを実行すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。エラーが発生しましたが、値がnullでない場合は、コンピューターにコードを実行するように指示しました。私は何か間違ったことをしましたか?

この質問に何か追加する必要があるかどうか教えてください。

4

3 に答える 3

1

まず、の任意の組み合わせについてa.b.c、それをチェックしても、それがnullにならない、またはnullになれa.b.c != nullないという意味ではありません。a.ba

他のコメンテーターが指摘しているように、他の変数がnullになるのを防ぐこともできません。

i次に、選択した行ごとにインクリメントするのに、最初の行以外は使用しない理由が明確ではありません。

選択できる行は1つだけだと言うのに、なぜループを気にする必要があるのでしょうか。

私は期待します:

int i = 0;
while (i < dgv.SelectedRows.Count)
{
    if (dgv.SelectedRows[0].Cells[i].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].Value.ToString(); //gets error
    i++;
}

することが:

int i = 0;
while (i < dgv.SelectedRows.Count)
{
    if (dgv.SelectedRows[i].Cells[0].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[i].Cells[0].Value.ToString(); //gets error
    i++;
}

または:

int i = 0;
while (i < dgv.SelectedCells.Count)
{
    if (dgv.SelectedRows[0].Cells[i].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].Value.ToString(); //gets error
    i++;
}
于 2013-01-22T10:30:54.843 に答える
0

VariablesそれはそれであるかaddModArray、nullである可能性もあります。

于 2013-01-22T10:55:08.100 に答える
-2

これを試して

   //please try this
    int i = 0;
    if(dgv.SelectedRows.Count > 0)
    {
        while (i < dgv.Columns.Count)
        {
            Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].FormattedValue; 
            i++;
        }
    }
于 2013-01-22T10:33:16.400 に答える