-4

だから私は情報を含むデータグリッドを持っているwinformを持っていて、それを検索したいのですが、検索の基準を製品の年(int)とそのタイプ(文字列)にしたいのです。

products[] a = new products[productscopy.Count];
int type = int.Parse(textBox2.Text);
int year = int.Parse(textBox1.Text);

int br = 0;
foreach (products sl in productscopy)
{
    if (sl.Year == year && sl.Type == type) //line that causes problem
    {
        a[br] = sl; br++;
    }
}
if (br > 0)
{
    products[] b = new products[br];
    for (int i = 0; i < br; i++)
    {
        b[i] = a[i];
    }
    dataGridView1.DataSource = b;
    dataGridView1[0, 0].Selected = false;
}
else { dataGridView1.DataSource = null; }
4

3 に答える 3

0

2つの可能性が見えます...

sl.Yearタイプstringまたはsl.Typeタイプのいずれかstring(または両方)

どちらの場合でも、比較する変数は次のstringように宣言する必要があります。

string type = textBox2.Text;

必要に応じて必要に.Trimなる場合があります。

これらの基になるプロパティの型を変更するか、追加.ToString()して、期待する動作が得られるかどうかを確認することができます。

上記の提案に従って使用する必要もありますが、.NET はそれ以外の場合はコンパイルされないため、これはタイプミスであり、問​​題ではありません===

于 2013-05-16T19:29:13.947 に答える
0

まさにエラーの内容 -stringint(または任意の数値クラス) の間に「==」の比較はありません。

それらの 1 つを別の型に変換する必要があります。通常、より厳密な型に変換する方が適切ですが、より多くのエラー処理が必要になる場合があります。

あなたの場合、解析されていない年からの単純な使用法textBox1.Text(おそらくタイプも同じ)で十分です:

if (sl.Year == textBox1.Text && sl.Type == textBox2.Text)

またはテキスト値で int.Parse を使用します (数値sl.Yearでない場合は例外を処理する必要があります):

if (int.Parse(sl.Year) == year && int.Parse(sl.Type) == type)

注:あなたのサンプルは=年の比較であり、おそらく間違いです.

于 2013-05-16T19:29:23.213 に答える