How to Transfer DataTable for store of gridpanel ?

  1. #1

    How to Transfer DataTable for store of gridpanel ?

    Hi,

    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.
  2. #2
    I've been using this format:

    ClassBS bs = new ClassBS();
                DataTable dt;
                dt = bs.CarregarWorkshop(id);
    
                Ext.Net.Store st = new Ext.Net.Store();
                Store1.DataSource = dt;
                Store1.DataBind();
                try
                {
                    if (dt != null)
                    {
                        this.Store1.DataSource = dt; 
                        this.Store1.DataBind();     
                        this.GridPanelWS.DataBind();
    
    
    
                    }
                }
                catch (Exception exp)
                {
                    DisplayAJAXMessage(this, exp.Message);

    Quote Originally Posted by kkp0633 View Post
    Hi,

    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.
    Last edited by geoffrey.mcgill; Apr 09, 2012 at 12:04 AM. Reason: please use [CODE] tags
  3. #3
  4. #4
    Quote Originally Posted by Daniil View Post
    Hi,

    Thank you Daniil and MADSON, Both of your suggestions help me a lot.

    I need some time to think about .I will post my solution after solving.

    Thank you very much.

Similar Threads

  1. Replies: 1
    Last Post: Jun 26, 2012, 1:40 PM
  2. Datatable and Store columns mapping
    By QualityCode in forum 1.x Help
    Replies: 0
    Last Post: Dec 16, 2010, 8:45 PM
  3. Creating Store from Datatable
    By QualityCode in forum 1.x Help
    Replies: 2
    Last Post: Dec 13, 2010, 5:20 AM
  4. using DataTable as Store and saving data
    By angel colmenares in forum 1.x Help
    Replies: 0
    Last Post: Apr 16, 2010, 12:13 AM
  5. Replies: 1
    Last Post: Jul 30, 2009, 10:32 AM

Tags for this Thread

Posting Permissions