2020-04-27
2020-04-28 更新
GridView1.Columns.Count 是「非自動生成列數」。不管是否為 Visible。
GridView1.HeaderRow.Cells.Count 是「自動生成列數」和「非自動生成列數」的總和。不管是否為 Visible。
GridView1 會先顯示「非自動生成」的欄位,再顯示「自動生成」的欄位。
GridView1.Visible = false; 時,GridView1.HeaderRow.Cells[i].Visible 總是會 false。
GridView1.Visible = true; 時,GridView1.HeaderRow.Cells[i].Visible 總是會 true。
GridView1.Columns[i].Visible 才能判斷該欄位是否為 true 或 false。
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication3.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" SelectCommand="SELECT * FROM [MyTable]"></asp:SqlDataSource> <br /> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" Caption="GridView1:非自動生成列" AutoGenerateColumns="False" DataKeyNames="SN" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" /> <asp:BoundField DataField="myID" HeaderText="myID" SortExpression="myID" /> <asp:BoundField DataField="myName" HeaderText="myName" SortExpression="myName" /> <asp:BoundField DataField="purchaseDate" HeaderText="purchaseDate" SortExpression="purchaseDate" /> </Columns> </asp:GridView> <br /> <asp:GridView ID="GridView2" runat="server" AllowPaging="True" AllowSorting="True" Caption="GridView2:自動生成列" AutoGenerateColumns="true" DataKeyNames="SN" DataSourceID="SqlDataSource1"> </asp:GridView> <br /> <asp:GridView ID="GridView3" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Caption="GridView3:非自動生成列" DataKeyNames="SN" DataSourceID="SqlDataSource1" Visible="false"> <Columns> <asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" /> <asp:BoundField DataField="myID" HeaderText="myID" SortExpression="myID" /> <asp:BoundField DataField="myName" HeaderText="myName" SortExpression="myName" /> <asp:BoundField DataField="purchaseDate" HeaderText="purchaseDate" SortExpression="purchaseDate" /> </Columns> </asp:GridView> <br /> <asp:GridView ID="GridView4" runat="server" AllowPaging="True" AllowSorting="True" Caption="GridView4:非自動生成列" AutoGenerateColumns="true" DataKeyNames="SN" DataSourceID="SqlDataSource1" Visible="false"> </asp:GridView> <br /> <asp:GridView ID="GridView5" runat="server" AllowPaging="True" AllowSorting="True" Caption="GridView5:混合自動生成列" AutoGenerateColumns="true" DataKeyNames="SN" DataSourceID="SqlDataSource1" Visible="false"> <Columns> <asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" /> <asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" Visible="false" /> <%--<asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" />--%> </Columns> </asp:GridView> <br /> <asp:GridView ID="GridView6" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Caption="GridView6:非自動生成列" DataKeyNames="SN" DataSourceID="SqlDataSource1" Visible="false"> <Columns> <asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" /> <asp:BoundField DataField="myID" HeaderText="myID" SortExpression="myID" Visible="false" /> <asp:BoundField DataField="myName" HeaderText="myName" SortExpression="myName" /> <asp:BoundField DataField="purchaseDate" HeaderText="purchaseDate" SortExpression="purchaseDate" /> </Columns> </asp:GridView> <br /> <asp:GridView ID="GridView7" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Caption="GridView7:非自動生成列" DataKeyNames="SN" DataSourceID="SqlDataSource1" Visible="true"> <Columns> <asp:BoundField DataField="SN" HeaderText="SN" InsertVisible="False" ReadOnly="True" SortExpression="SN" /> <asp:BoundField DataField="myID" HeaderText="myID" SortExpression="myID" Visible="false" /> <%--<asp:BoundField DataField="myName" HeaderText="myName" SortExpression="myName" />--%> <asp:BoundField DataField="purchaseDate" HeaderText="purchaseDate" SortExpression="purchaseDate" /> </Columns> </asp:GridView> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> <br /> <br /> GridView1.Columns.Count 是「非自動生成列數」。不管是否為 Visible。<br /> GridView1.HeaderRow.Cells.Count 是「自動生成列數」和「非自動生成列數」的總和。不管是否為 Visible。<br /> <br /> GridView1.Visible = false; 時,GridView1.HeaderRow.Cells[i].Visible 總是會 false。<br /> <br /> <asp:Label ID="Label1" runat="server" ></asp:Label><br /> <br /> </div> </form> </body> </html> |
Default.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication3 { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { Label1.Text = ""; Label1.Text = Label1.Text + "GridView1.HeaderRow.Cells.Count : " + GridView1.HeaderRow.Cells.Count + "<br />"; Label1.Text = Label1.Text + "GridView2.HeaderRow.Cells.Count : " + GridView2.HeaderRow.Cells.Count + "<br />"; Label1.Text = Label1.Text + "GridView3.HeaderRow.Cells.Count : " + GridView3.HeaderRow.Cells.Count + "<br />"; Label1.Text = Label1.Text + "GridView4.HeaderRow.Cells.Count : " + GridView4.HeaderRow.Cells.Count + "<br />"; Label1.Text = Label1.Text + "GridView5.HeaderRow.Cells.Count : " + GridView5.HeaderRow.Cells.Count + "<br />"; Label1.Text = Label1.Text + "GridView6.HeaderRow.Cells.Count : " + GridView6.HeaderRow.Cells.Count + "<br />"; Label1.Text = Label1.Text + "GridView7.HeaderRow.Cells.Count : " + GridView7.HeaderRow.Cells.Count + "<br />"; Label1.Text = Label1.Text + "GridView1.Columns.Count : " + GridView1.Columns.Count + "<br />"; Label1.Text = Label1.Text + "GridView2.Columns.Count : " + GridView2.Columns.Count + "<br />"; Label1.Text = Label1.Text + "GridView3.Columns.Count : " + GridView3.Columns.Count + "<br />"; Label1.Text = Label1.Text + "GridView4.Columns.Count : " + GridView4.Columns.Count + "<br />"; Label1.Text = Label1.Text + "GridView5.Columns.Count : " + GridView5.Columns.Count + "<br />"; Label1.Text = Label1.Text + "GridView6.Columns.Count : " + GridView6.Columns.Count + "<br />"; Label1.Text = Label1.Text + "GridView7.Columns.Count : " + GridView7.Columns.Count + "<br />"; } } } |
(完)