如何从我的ASPx DevExpress gridview导出选定的数据

时间:2013-08-28 16:45:59

标签: c# asp.net gridview data-binding devexpress

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

这是我的ASPx页面的样本。

加载数据按钮

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

gridview

<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>

GridExporter

    <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对象中创建数据。然后我将我的dataTable绑定到我的网格。

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

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

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

我跟着DevExpress tutoria to export selected rows in ASPl。但似乎我的页面被刷新,所以我在导出之前松开了与网格绑定的数据。

2 个答案:

答案 0 :(得分:2)

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

protected void createFile_Click(object sender, EventArgs e)
{
    grid.DataSource = fakes;        
    grid.DataBind();        
    gridExport.WriteXlsToResponse();
}

答案 1 :(得分: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;

        }