0

Aspに、GridView'AutoGenerateColumns="False"を持つユーザーコントロールがあります。UCのプロパティに従って列を非表示または表示する必要があります。どうやってやるの?

これは私がやろうと思った方法です:

<asp:TemplateField HeaderText="<%=SelezionaColumnName  %>" HeaderStyle-Width="80px">

ここで、headerTextはpublic const string SelezionaColumnNameに設定されていませんが、値ではなく名前に。を付けて、そのまま(stringで)レンダリングされることに注意してください<%= %>。理由はわかりませんが、これは拘束力のせいですか?

背後にあるコード:

public const string SelezionaColumnName = "Seleziona";

        public bool ShowSeleziona
        {
            set
            {
                grdMaterialiArt.Columns[GetColumnIndexByName(grdMaterialiArt, SelezionaColumnName)].Visible = value;
            }
        }

 protected int GetColumnIndexByName(GridView grid, string name)
        {
            foreach (DataControlField col in grid.Columns)
            {
                if (col.HeaderText.ToLower().Trim() == name.ToLower().Trim())
                {
                    return grid.Columns.IndexOf(col);
                }
            }

            return -1;
        }

注:0インデックスを使用することに注意する必要があります。列の前に列を追加できるため、列を一意に識別する必要があります。TemplateFieldはIDを持つことができないため、名前による識別アプローチを続けました:| シナリオを十分に説明したことを願っています。私もよく検索しましたが、似たようなものは見つかりませんでした。

4

1 に答える 1

3
 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {

        try
        {
            DataTable dt = (DataTable ) GridView1.DataSource;
            if (!dt.Columns.Contains("COLLUMN_YOU_WANNA_HIDE")) return;
            int j = dt.Columns.IndexOf("COLLUMN_YOU_WANNA_HIDE");
            e.Row.Cells[j].Visible = false;
            e.Row.Cells[j].Width = 0;
        }
        catch (Exception)
        {


        }

    }
于 2013-01-14T12:41:26.923 に答える