【问题标题】:Is ASP.NET GridView data for non-visible columns are stored in viewstate?不可见列的 ASP.NET GridView 数据是否存储在视图状态中?
【发布时间】:2013-01-02 20:38:41
【问题描述】:

如果我从 MS-SQL 表中查询 select * 并仅显示少数数据列(其余列不可见或不存在),发送到 GridView 的查询结果是否包括所有未使用的列的数据或 GridView 仅发送将要显示的数据。如果发送了所有数据,那么是仅将这些数据存储在 ViewState 中还是存储所有数据 谢谢。

【问题讨论】:

    标签: asp.net sql-server select gridview


    【解决方案1】:

    是的。所有列都可供 GridView 显示。现在取决于您是要显示部分还是全部。当您在 GridView 上设置 AutoGenerateColumns="true" 时,这一点很明显。

    GridView 是一个表示对象,并抽象/提取底层数据源中的信息,例如

    <asp:GridView runat="server" DataKeyNames="ProductID" ID="GridView1">
    <Columns>
        <asp:BoundColumn HeaderText="Product Name" DataField="ProductName" />
        <asp:BoundColumn HeaderText="Price" DataField="Price" />
    </Columns>
    </asp:GridView>
    

    从上面的示例中,ProductNamePrice 显示在 GridView 中,但您的数据源中的一些其他列可用,例如ProductID 用于DataKeyNames

    【讨论】:

    • 您绝对正确,数据可用。您的意思是(未使用/未显示的)数据无论是否显示都会发送给用户?这与上面的@Aquinas 答案相反。
    • 是的,数据已发送。不是相反,只是从另一个角度——ViewState。当您不在 GridView 中显示它时,它不是 ViewState 的一部分。 ViewState 包含有关页面中显示的所有控件及其状态的信息,以便在您回发时检索相同的信息以重新显示您的页面。您可以在 Session、Cookie 中有一些数据可供用户使用,这并不意味着它们处于 ViewState
    【解决方案2】:

    你的问题有点模棱两可。您的意思是,如果您不显示或定义数据集中包含的列,ViewState 的大小是否仍会像显示时一样增加?如果这就是你要问的,那么答案是否定的。例如,您可以拥有一个包含 100 列的 DataTable,但如果您在 GridView 中仅显示其中 1 列,则 ViewState 的大小将与您的 DataTable 仅包含那一列相同。

    【讨论】:

    • 是的,我的意思正是你的第二句话所说的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多