May 05, 2011, 11:16 AM
[CLOSED] Export dynamically created Grid/Store
Hi,
I trying to export the data from an dynically created grid/store, but can't figure out how to ..
This is my (example) code:
Can you help me achieve my goal ?
Martin
I trying to export the data from an dynically created grid/store, but can't figure out how to ..
This is my (example) code:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Xml.Xsl" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
CreateDataMenu();
}
private static Store BuildStore(DataTable dt)
{
Store store = new Store { ID = "Store1", AutoDestroy = true};
JsonReader ar = new JsonReader();
foreach (DataColumn column in dt.Columns)
{
ar.Fields.Add(new Ext.Net.RecordField(column.Caption, RecordFieldType.Auto));
}
store.Reader.Add(ar);
store.DataSource = dt;
store.DataBind();
store.DirectEventConfig.IsUpload = true;
return store;
}
private static GridPanel BuildGridPanel(DataTable dt, String cNaam)
{
GridPanel gp = new GridPanel { Border = false, StripeRows = true, TrackMouseOver = true, Title = cNaam, ID = "GridPanel1" };
gp.Store.Add(BuildStore(dt));
gp.SelectionModel.Add(new RowSelectionModel {SingleSelect = true});
foreach (Column col in
from DataColumn column in dt.Columns
select new Column {Header = column.Caption, ColumnID = column.Caption, DataIndex = column.Caption})
{
gp.ColumnModel.Columns.Add(col);
}
return gp;
}
public void CreateDataMenu()
{
DataSet ds = new DataSet("root");
ds.ReadXml(new XmlTextReader(new StringReader(getXml())));
if (ds.Tables[0].Rows.Count > 0)
{
System.Data.DataView dv1 = new System.Data.DataView(ds.Tables["Rapport"]) { Sort = "naam asc" };
// Loop through each row in the view.
foreach (DataRowView rowView in dv1)
{
String sId = Convert.ToString(rowView["queryid"]);
String sNaam = Convert.ToString(rowView["naam"]);
Ext.Net.MenuItem mi = new Ext.Net.MenuItem
{
ID = sId,
Text = sNaam,
Icon = Icon.ApplicationViewColumns
};
mi.DirectEvents.Click.ExtraParams.Add(
new Ext.Net.Parameter { Name = "queryId", Value = sId, Mode = ParameterMode.Raw });
mi.DirectEvents.Click.Event += Click_Event;
mi.DirectEvents.Click.Before = @"var grid = Ext.getCmp('GridPanel1');
if (grid) {
grid.destroy();
}";
Menu1.Items.Add(mi);
}
}
}
public void Click_Event(object sender, DirectEventArgs e)
{
int queryid = Convert.ToInt32(e.ExtraParams["queryId"]);
DataSet ds = new DataSet("root");
ds.ReadXml(new XmlTextReader(new StringReader(getXml())));
if (ds.Tables[0].Rows.Count > 0)
{
DataRow[] drs = ds.Tables["Rapport"].Select(string.Format("queryid='{0}'", queryid));
if (drs.GetLength(0) > 0)
{
string cNaam = Convert.ToString(drs[0]["naam"]);
DataTable dt = queryid % 2 == 0 ? GetTable() : GetTable1();
BuildGridPanel(dt, cNaam).AddTo(Panel1);
}
}
}
static DataTable GetTable()
{
// Here we create a DataTable with four columns.
DataTable table = new DataTable();
table.Columns.Add("Weight", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Breed", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
// Here we add five DataRows.
table.Rows.Add(57, "Koko", "Shar Pei", DateTime.Now);
table.Rows.Add(130, "Fido", "Bullmastiff", DateTime.Now);
table.Rows.Add(92, "Alex", "Anatolian Shepherd Dog", DateTime.Now);
table.Rows.Add(25, "Charles", "Cavalier King Charles Spaniel", DateTime.Now);
table.Rows.Add(7, "Candy", "Yorkshire Terrier", DateTime.Now);
return table;
}
static DataTable GetTable1()
{
// Here we create a DataTable with four columns.
DataTable table = new DataTable();
table.Columns.Add("Bla", typeof(int));
table.Columns.Add("Ble", typeof(string));
table.Columns.Add("Bli", typeof(string));
table.Columns.Add("Blu", typeof(DateTime));
// Here we add five DataRows.
table.Rows.Add(57, "aa", "aaaa", DateTime.Now);
table.Rows.Add(130, "bb", "bbbbb", DateTime.Now);
table.Rows.Add(92, "cc", "ccccc", DateTime.Now);
table.Rows.Add(25, "dd", "ddddd", DateTime.Now);
table.Rows.Add(7, "ee", "eeee", DateTime.Now);
return table;
}
static string getXml()
{
const string sFile = @"<?xml version=""1.0"" encoding=""utf-8""?>
<root>
<rapport>
<queryid>1</queryid>
<naam>Debiteuren</naam>
<query><![CDATA[SELECT Volgnummer, cNaamSamengesteld AS Naam, Adres, Huisnummer, Postcode, Plaats FROM Debiteur WHERE volgnummer in (0)]]></query>
</rapport>
<rapport>
<queryid>2</queryid>
<naam>Gebruikers</naam>
<query><![CDATA[SELECT DISTINCT [User].cNaam AS Naam, [User].cEmail AS Email, [User].cAfdeling AS Afdeling FROM [User] INNER JOIN DebiteurUser ON [User].Id = DebiteurUser.nUserId WHERE DebiteurUser.nDebiteurVolgNummer IN (0)]]></query>
</rapport>
</root>
";
return sFile;
}
protected void Store1_Submit(object sender, StoreSubmitDataEventArgs e)
{
string format = FormatType.Value.ToString();
XmlNode xml = e.Xml;
Response.Clear();
switch (format)
{
case "xml":
string strXml = xml.OuterXml;
Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xml");
Response.AddHeader("Content-Length", strXml.Length.ToString());
Response.ContentType = "application/xml";
Response.Write(strXml);
break;
case "xls":
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xls");
XslCompiledTransform xtExcel = new XslCompiledTransform();
xtExcel.Load(Server.MapPath("~/Excel.xsl"));
xtExcel.Transform(xml, null, Response.OutputStream);
break;
case "csv":
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.csv");
XslCompiledTransform xtCsv = new XslCompiledTransform();
xtCsv.Load(Server.MapPath("~/Csv.xsl"));
xtCsv.Transform(xml, null, Response.OutputStream);
break;
}
Response.End();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Simple Array Grid - Ext.NET Examples</title>
<link href="../style/examples.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var submitValue = function (grid, hiddenFormat, format) {
hiddenFormat.setValue(format);
grid.submitData(false);
};
</script>
</head>
<body>
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<ext:Hidden ID="FormatType" runat="server" />
<ext:Panel
ID="Panel1"
runat="server"
Title="Dataexport"
Layout="fit"
Height="350"
Width="600">
<TopBar>
<ext:Toolbar ID="Toolbar1" runat="server">
<Items>
<ext:Button ID="tbContracten" runat="server" Text="Overzichten" Icon="ApplicationViewList">
<Menu>
<ext:Menu ID="Menu1" Visible="true" runat="server">
<Items>
</Items>
</ext:Menu>
</Menu>
</ext:Button>
<ext:ToolbarFill ID="ToolbarFill1" runat="server" />
<ext:Button ID="Button2" runat="server" Text="To XML" Icon="PageCode">
<Listeners>
<Click Handler="submitValue(#{GridPanel1}, #{FormatType}, 'xml');" />
</Listeners>
</ext:Button>
<ext:Button ID="Button3" runat="server" Text="To Excel" Icon="PageExcel">
<Listeners>
<Click Handler="submitValue(#{GridPanel1}, #{FormatType}, 'xls');" />
</Listeners>
</ext:Button>
<ext:Button ID="Button4" runat="server" Text="To CSV" Icon="PageAttach">
<Listeners>
<Click Handler="submitValue(#{GridPanel1}, #{FormatType}, 'csv');" />
</Listeners>
</ext:Button>
</Items>
</ext:Toolbar>
</TopBar>
</ext:Panel>
</body>
</html>
Probably need to expand the store with (for example) "OnSubmitData="Store1_Submit"", but trying to figure out how..Can you help me achieve my goal ?
Martin
Last edited by Daniil; May 06, 2011 at 3:23 PM.
Reason: [CLOSED]