0

我需要将 DevExpress GridView 的选定行导出到 XLS。当我尝试导出我的网格时,它会创建一个空文件。我认为这是由于回调在导出之前清除了我的网格中的数据。

这是我的 ASPx 页面的示例。

加载数据按钮

 <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Styles/Images/load.png" onclick="ImageButton1_Click" />

网格视图

<dx:ASPxGridView ID="grid" ClientInstanceName="grid" runat="server" AutoGenerateColumns="False" KeyFieldName="car">
        <Columns>
            <dx:GridViewCommandColumn ShowSelectCheckbox="True" VisibleIndex="0" Caption="">
            </dx:GridViewCommandColumn>
            <dx:GridViewDataTextColumn Caption="Category" VisibleIndex="1" FieldName="category"
                Name="category" GroupIndex="0" SortIndex="0" SortOrder="Ascending">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn Caption="Car" VisibleIndex="2" FieldName="car" Name="car">
            </dx:GridViewDataTextColumn>
        </Columns>
        <SettingsPager PageSize="100">
        </SettingsPager>
        <Settings ShowFooter="True" />

        <GroupSummary>
            <dx:ASPxSummaryItem FieldName="car" SummaryType="Count" />
        </GroupSummary>

    </dx:ASPxGridView>

网格导出器

    <dx:ASPxGridViewExporter ID="gridExport" runat="server" GridViewID="grid" ExportedRowType="Selected" />

创建文件按钮

<dx:ASPxButton ID="createFile" runat="server" Text="Create File"      UseSubmitBehavior="False" OnClick="createFile_Click">
                    <Image Url="~/Styles/Images/save.png">
                    </Image>
    </dx:ASPxButton>

现在是后面的代码。

当我单击加载按钮时,我会为我的测试创建假数据。

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        CreateFakeData();
    }

我在 DataTable 对象中创建我的数据。然后我将我的数据表与我的网格绑定。

grid.DataSource = fakes;
grid.DataBind();

一切似乎都很好,但是当我单击导出按钮时,什么都没有导出。

    protected void createFile_Click(object sender, EventArgs e)
    {
        gridExport.WriteXlsToResponse();
    }

我按照DevExpress 教程导出 ASPl 中的选定行。但似乎我的页面已刷新,因此我在导出之前松开了与网格绑定的数据。

4

2 回答 2

2

当我在后面的代码中将数据绑定到 ASPXGridView 时,我遇到了类似的情况。我能够通过在导出行之前单击按钮重新绑定来解决它。

protected void createFile_Click(object sender, EventArgs e)
{
    grid.DataSource = fakes;        
    grid.DataBind();        
    gridExport.WriteXlsToResponse();
}
于 2013-08-28T17:49:18.373 回答
2

问题在于回发,正如我所料,我需要一种方法将我的 gridView 数据保存在某个地方并在回发后重新加载它。

我将OnDataBinding属性添加到我的 gridView

 <dx:ASPxGridView ID="grid" ClientInstanceName="grid" runat="server"
AutoGenerateColumns="False" Width="100%" Caption="My car collection"
OnDataBinding="grid_DataBinding" KeyFieldName="car_model">

在后面的代码中,我编写了grid-DataBinding函数,以便它使用之前存储在会话中的数据来恢复数据。

  protected void grid_DataBinding(object sender, EventArgs e)
        {
            if (Session["gridData"] != null)
            {
                // Assign the data source in grid_DataBinding
                grid.DataSource = Session["gridData"];
            }
        }

不要忘记在需要时将数据保存在会话中。(我是在搜索后立即做的)

 protected void searchBtn_Click(object sender, ImageClickEventArgs e)
        {

            datas = FindCars(input.Text);

            grid.DataSource = datas;
            grid.DataBind();

            //Store data in the session
            Session["gridData"] = this.datas;

        }
于 2013-09-16T15:00:23.530 回答