我需要将我的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。但似乎我的页面被刷新,所以我在导出之前松开了与网格绑定的数据。
答案 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;
}