0

いくつかの列を非表示にしているグリッド ビューがあります。グリッド ビューに少なくとも 1 つのアイテムがある場合は期待どおりの結果が得られますが、グリッドが空の場合は非表示の列が表示されます。レコードがない場合の解決方法は、グリッド ビューが空であることを意味し、非表示にされた列も非表示にします。グリッドの OnitemDataBound(object sender, GridItemEventArgs e) イベントで列を非表示にしています。

4

3 に答える 3

0

サーバーからのデータがない場合、列名などを非表示にしたいとします。グリッド ビューの空のテンプレート機能を使用できます。デザイナー モードに移動し、グリッド ビューのクイック プロパティをクリックします。テンプレートに移動し、空のテンプレートを選択します。次に、「レコードが見つかりません」などのテキストまたはメッセージを書きます。コードを実行します。このためにサーバー側のコードを記述する必要はありません。

于 2013-11-13T13:10:42.303 に答える
0

コードを使用して列を非表示にする必要があります。1. ロジックは、行をループして、列にすべての行の値がないかどうかを確認するようにする必要があります。2. 列にのみ値が存在しない場合は、列を非表示にします。3. このロジック全体を prerender イベントに実装する必要があります。

今夜サンプルコードを提供できます...

これがサンプルコードです...

 protected void GridView1_PreRender(object sender, EventArgs e)
            {
                bool isColumnEmpty = true;
                int columnIndex =2;
                for (int i = 0; i < GridView1.Rows.Count; i++)
                {
                    if (GridView1.Rows[i].Cells[columnIndex].ToString() != string.Empty)
                    {
                        isColumnEmpty = false;
                        break;
                    }
                }
                if (isColumnEmpty)
                {
                    GridView1.Columns[columnIndex].Visible = false;
                }
            }

完全なコード サンプル ASPX コード:

<form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            onprerender="GridView1_PreRender">
            <Columns>
                <asp:BoundField DataField="dc1" HeaderText="Column - 1" />
                <asp:BoundField DataField="dc2" HeaderText="Column - 2" />
                <asp:BoundField DataField="dc3" HeaderText="Column - 3" />
                <asp:BoundField DataField="dc4" HeaderText="Column - 4" />
                <asp:BoundField DataField="dc5" HeaderText="Column - 5" />
            </Columns>
        </asp:GridView>
    </div>
    </form>

CS コード :

 public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            GridView1.DataSource = GetDataSet();
            GridView1.DataBind();
        }

        private DataSet GetDataSet()
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();

            DataColumn dc1 = new DataColumn("dc1");
            DataColumn dc2 = new DataColumn("dc2");
            DataColumn dc3 = new DataColumn("dc3");
            DataColumn dc4 = new DataColumn("dc4");
            DataColumn dc5 = new DataColumn("dc5");

            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);
            dt.Columns.Add(dc4);
            dt.Columns.Add(dc5);

            for (int i = 0; i < 10; i++)
            {
                DataRow dr = dt.NewRow();
                dr[dc1] = i;
                //dr[dc2] = "2" + i.ToString();
                dr[dc3] = "3"+ i.ToString();
                dr[dc4] = "4" + i.ToString();
                dr[dc5] = "5" + i.ToString();
                dt.Rows.Add(dr);
            }

            ds.Tables.Add(dt);
            return ds;
        }

        protected void GridView1_PreRender(object sender, EventArgs e)
        {
            bool isColumnEmpty = true;
            int columnIndex =2;
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                if (GridView1.Rows[i].Cells[columnIndex].ToString() != string.Empty)
                {
                    isColumnEmpty = false;
                    break;
                }
            }
            if (isColumnEmpty)
            {
                GridView1.Columns[columnIndex].Visible = false;
            }
        }
    }
于 2013-11-13T12:49:38.377 に答える