Apr 07, 2012, 5:21 PM
How to Transfer DataTable for store of gridpanel ?
Hi,
I have a Store in my aspx file as:
I wonder there is "dynamic method": It can detect different Ext.Store definition(RecordField datatype) and transfer Source-DataTable row by row automatically.
Any Suggestion or idea ??
Appreciate so much!!!!
Ivan.
I have a Store in my aspx file as:
<ext:Store ID="InventoryMaintainStore" runat="server" GroupField="StockChinName">
<Reader>
<ext:JsonReader>
<Fields>
<ext:RecordField Name="StockroomID" Type="string"></ext:RecordField>
<ext:RecordField Name="StockChinName" Type="string"></ext:RecordField>
<ext:RecordField Name="MaterialCode" Type="string"></ext:RecordField>
<ext:RecordField Name="MaterialChinName" Type="String"></ext:RecordField>
<ext:RecordField Name="MaterialMSpec" Type="String"></ext:RecordField>
<ext:RecordField Name="SafetyQty" Type="Int"></ext:RecordField>
<ext:RecordField Name="SafetyDay" Type="Int"></ext:RecordField>
<ext:RecordField Name="MonthUsageQty" Type="Int"></ext:RecordField>
<ext:RecordField Name="AutoTransQty" Type="Int"></ext:RecordField>
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
In the example:https://examples1.ext.net/#/GridPane...ata/DataTable/private DataTable GetDataTable()
{
DataTable table = new DataTable();
table.Columns.AddRange(new DataColumn[] {
new DataColumn("Company") { ColumnName = "Company", DataType = typeof(string) },
new DataColumn("Price") { ColumnName = "Price", DataType = typeof(double) },
new DataColumn("Change") { ColumnName = "Change", DataType = typeof(double) },
new DataColumn("PctChange") { ColumnName = "PctChange", DataType = typeof(double) },
new DataColumn("PctChange") { ColumnName = "LastChange", DataType = typeof(DateTime) }
});
foreach (object[] obj in this.Data)
{
table.Rows.Add(obj);
}
return table;
}
My Solution is as same as the example,Like:DataTable targettbl = new DataTable();
targettbl.Columns.AddRange(new DataColumn[] {
new DataColumn("StockroomID") {ColumnName="StockroomID", DataType=typeof(string)},
new DataColumn("StockChinName") {ColumnName="StockChinName", DataType=typeof(string)},
new DataColumn("MaterialCode") {ColumnName="MaterialCode", DataType=typeof(string)},
new DataColumn("MaterialChinName") {ColumnName="MaterialChinName", DataType=typeof(string)},
new DataColumn("MaterialMSpec") {ColumnName="MaterialMSpec", DataType=typeof(string)},
new DataColumn("SafetyQty") {ColumnName="SafetyQty", DataType=typeof(int)},
new DataColumn("SafetyDay") {ColumnName="SafetyDay", DataType=typeof(int)},
new DataColumn("MonthUsageQty") {ColumnName="MonthUsageQty", DataType=typeof(int)},
new DataColumn("AutoTransQty") {ColumnName="AutoTransQty", DataType=typeof(int)},
new DataColumn("UsedQty") {ColumnName="UsedQty", DataType=typeof(int)}
}
);
foreach (DataRow row in sourcetbl.Rows)
{
DataRow targetrow = targettbl.NewRow();
targetrow["StockroomID"] = row["StockroomID"].ToString();
targetrow["StockChinName"] = row["StockChinName"].ToString();
targetrow["MaterialCode"] = row["MaterialCode"].ToString();
targetrow["MaterialChinName"] = row["MaterialCName"].ToString();
targetrow["MaterialMSpec"] = row["MaterialMSpec"].ToString();
targetrow["SafetyQty"] = row["SafetyQty"] is DBNull ? 0 : Convert.ToDecimal(row["SafetyQty"]);
targetrow["SafetyDay"] = row["SafetyDay"] is DBNull ? 0 : Convert.ToDecimal(row["SafetyDay"]);
targetrow["MonthUsageQty"] = row["MonthUsageQty"] is DBNull ? 0 : Convert.ToDecimal(row["MonthUsageQty"]);
targetrow["AutoTransQty"] = row["AutoTransQty"] is DBNull ? 0 : Convert.ToDecimal(row["AutoTransQty"]);
targetrow["UsedQty"] = row["UsedQty"] is DBNull ? 0 : Convert.ToDecimal(row["UsedQty"]);
targettbl.Rows.Add(targetrow);
}
return targettbl;
My solution uses a kind of "fixed" solution: to declare a Target-DataTable and add dataRow into this DataTable for Ext.Store .I wonder there is "dynamic method": It can detect different Ext.Store definition(RecordField datatype) and transfer Source-DataTable row by row automatically.
Any Suggestion or idea ??
Appreciate so much!!!!
Ivan.