C#のGridViewの編集行で画像ボタンを非表示にする

Aug 21 2020

私はGridViewC#で個人レコードを表示しています

一人の人のために、私は単一のコードまたは複数の関連するコードを持つことができます。

人が認識されるList<string>と、彼のコードを含むが作成されます。

List<string> codList = new List<string>();
string ns;

if (reader.HasRows)
{
    while (reader.Read())
    {
        cod = reader["cod"].ToString();
        codList.Add(cod.ToString());
        aut = Convert.ToInt32(reader["Aut"]);
    }

    ns = "";
    ns = string.Join(",", (from cod in codList select "?").ToList());
}

この人の場合、コードのリストには次の値が含まれています。

32D
32B
33E
33G
35H

変数の値がautゼロより大きく、cod列の値がlist:の値に対応している場合は、GridViewの編集行の画像ボタンを非表示にする必要があります。

if (e.Row.RowType == DataControlRowType.DataRow)
{
    string cod = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "cod"));
    ImageButton btnEdit = (ImageButton)e.Row.FindControl("imgbtnEdit");

    foreach (var co in codList)
    {
        if (aut > 0 && cod.ToString().Contains(co.ToString()))
        {
            btnEdit.Visible = true;
        }
        else
        {
            btnEdit.Visible = true;
        }
    }
}

ただし、行を編集するためのボタンGridViewは、の最後の値に対してのみ表示されます。list

35H

他の人の代わりに、list行を編集するためのボタンの値GridViewは非表示になっています。

32D
32B
33E
33G

これを行うための最良の方法は何ですか?

回答

PalleDue Aug 21 2020 at 18:06

あなたの問題を完全に理解しているかどうかはわかりませんが、問題があります。

if (aut > 0 && cod.ToString().Contains(co.ToString()))
{
    btnEdit.Visible = true;
}
else
{
    btnEdit.Visible = true;
}

これは、条件に関係なく、btnEdit.Visible = trueと評価されます。私はあなたが意味したと思います:

btnEdit.Visible = (aut > 0 && cod.ToString().Contains(co.ToString());

また、forループで評価しても、毎回設定するbtnEditと同じであるため、ほとんど違いはありません。それはおそらくそれが固執する最後の値である理由を説明しています。