[CLOSED] add data to store in code behind does not work

  1. #1

    [CLOSED] add data to store in code behind does not work

    I want to upload a excel , save to server , then read the file , then load data in the file to the gridpanel .
    how , data can not load to the store , please check my code.
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="TobrosCWT.test.WebForm5" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="TobrosTools" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <script runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!X.IsAjaxRequest)
                {
                    this.store1.DataSource = new object[]
                        {
                            new object[]{"1","张三"},
                            new object[]{"2","李四"}
                        };
                }
            }
            protected void uploadAfile(object sender, DirectEventArgs e)
            {
                string tpl = "Uploaded file: {0}<br/>Size: {1} bytes";
                if (this.FileUploadField1.HasFile)
                {
                    Random ran = new Random();
                    string sNewName = DateTime.Now.ToString(@"yyyy-MM-dd-HH-mm-ss") + ran.Next(100, 999)
                                      + Path.GetExtension(FileUploadField1.PostedFile.FileName);
                    string strPath = Server.MapPath("~/Uploads/" + System.DateTime.Now.Year.ToString() + "/" + sNewName);
                    this.FileUploadField1.PostedFile.SaveAs(strPath);
                    DataSet excelData = ExcelTool.LoadDataFromExcel(strPath);
                    var gp_store = Ext.Net.X.GetCmp<Store>("store1");
                    for (int i = 0; i < excelData.Tables[0].Rows.Count; i++)
                    {
                        DataRow dr = excelData.Tables[0].Rows[i];
                        string id = dr[0].ToString();
                        string name = dr[1].ToString();
    
                        gp_store.Add(new object[] { id, name });
    
                    }
                    gp_store.Reload();
                }
                else
                {
                    X.Msg.Alert("消息", "上传失败");
                    return;
                }
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <ext:ResourceManager runat="server"></ext:ResourceManager>
            <ext:GridPanel runat="server">
                <TopBar>
                    <ext:Toolbar runat="server">
                        <Items>
                            <ext:FileUploadField ID="FileUploadField1" runat="server" ButtonText="导入excel" ButtonOnly="True" Icon="PageExcel">
                                <DirectEvents>
                                    <Change OnEvent="uploadAfile"></Change>
                                </DirectEvents>
                            </ext:FileUploadField>
                        </Items>
                    </ext:Toolbar>
                </TopBar>
                <Store>
                    <ext:Store runat="server" ID="store1">
                        <Model>
                            <ext:Model runat="server">
                                <Fields>
                                    <ext:ModelField Name="id"></ext:ModelField>
                                    <ext:ModelField Name="name"></ext:ModelField>
                                </Fields>
                            </ext:Model>
                        </Model>
                    </ext:Store>
                </Store>
                <ColumnModel>
                    <Columns>
                        <ext:Column runat="server" DataIndex="id" Text="编号"></ext:Column>
                        <ext:Column runat="server" DataIndex="name" Text="名称" Flex="1"></ext:Column>
                    </Columns>
    
                </ColumnModel>
            </ext:GridPanel>
        </form>
    </body>
    </html>
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.OleDb;
    using System.Linq;
    using System.Text;
    using Ext.Net;
    using Microsoft.Office.Interop.Excel;
    
    namespace TobrosTools
    {
        public static class ExcelTool
        {
            public static DataSet LoadDataFromExcel(string filePath)
            {
                DataSet OleDsExcle = new DataSet();
                try
                {
                    string strConn;
                    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
                    OleDbConnection OleConn = new OleDbConnection(strConn);
                    OleConn.Open();
                    String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名称,比如sheet2,等等   
    
                    OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
                  
                    OleDaExcel.Fill(OleDsExcle, "Sheet1");
                    OleConn.Close();
                    
                }
                catch (Exception err)
                {
                    X.Msg.Alert("消息", "数据绑定Excel失败!失败原因:" + err.Message).Show();
                  
                }
                return OleDsExcle;
            }
           
        }
    }
    Last edited by Daniil; Sep 03, 2013 at 5:01 AM. Reason: [CLOSED]
  2. #2
    Hi @tobros,

    To load some data to your Store during a DirectEvent you should do the following.
    this.store1.DataSource = newData;
    this.store1.DataBind();
    And, I think, you should remove:
    gp_store.Add(new object[] { id, name });
    gp_store.Reload();
  3. #3
    Quote Originally Posted by Daniil View Post
    Hi @tobros,

    To load some data to your Store during a DirectEvent you should do the following.
    this.store1.DataSource = newData;
    this.store1.DataBind();
    And, I think, you should remove:
    gp_store.Add(new object[] { id, name });
    gp_store.Reload();
    thank you .
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="TobrosCWT.test.WebForm5" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="TobrosTools" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <script runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!X.IsAjaxRequest)
                {
                    this.store1.DataSource = OriData();
                }
            }
    
            private object[] OriData()
            {
                return new object[]
                        {
                            new object[]{"1","张三"},
                            new object[]{"2","李四"}
                        };
            }
    
            protected void uploadAfile(object sender, DirectEventArgs e)
            {
              
                if (this.FileUploadField1.HasFile)
                {
                    Random ran = new Random();
                    string sNewName = DateTime.Now.ToString(@"yyyy-MM-dd-HH-mm-ss") + ran.Next(100, 999)
                                      + Path.GetExtension(FileUploadField1.PostedFile.FileName);
                    string strPath = Server.MapPath("~/Uploads/" + System.DateTime.Now.Year.ToString() + "/" + sNewName);
                    this.FileUploadField1.PostedFile.SaveAs(strPath);
                    DataSet excelData = ExcelTool.LoadDataFromExcel(strPath);
                    var gp_store = Ext.Net.X.GetCmp<Store>("store1");
                    
                    List<object[]> ll = new List<object[]>();
    
                    object[] oridata = OriData();
                    for (int i = 0; i < oridata.Length; i++)
                    {
                        object[] o = (object[])oridata[i];
                        ll.Add(o);
                    }
                     
                    for (int i = 0; i < excelData.Tables[0].Rows.Count; i++)
                    {
                        DataRow dr = excelData.Tables[0].Rows[i];
                        string id = dr[0].ToString();
                        string name = dr[1].ToString();
    
                        object[] o = {id, name};
                        ll.Add(o);
                    }
                     
                    this.store1.DataSource = ll;
                    this.store1.DataBind();
    
                }
                else
                {
                    X.Msg.Alert("消息", "上传失败");
                    return;
                }
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <ext:ResourceManager runat="server"></ext:ResourceManager>
            <ext:GridPanel runat="server">
                <TopBar>
                    <ext:Toolbar runat="server">
                        <Items>
                            <ext:FileUploadField ID="FileUploadField1" runat="server" ButtonText="导入excel" ButtonOnly="True" Icon="PageExcel">
                                <DirectEvents>
                                    <Change OnEvent="uploadAfile"></Change>
                                </DirectEvents>
                            </ext:FileUploadField>
                        </Items>
                    </ext:Toolbar>
                </TopBar>
                <Store>
                    <ext:Store runat="server" ID="store1">
                        <Model>
                            <ext:Model runat="server">
                                <Fields>
                                    <ext:ModelField Name="id"></ext:ModelField>
                                    <ext:ModelField Name="name"></ext:ModelField>
                                </Fields>
                            </ext:Model>
                        </Model>
                    </ext:Store>
                </Store>
                <ColumnModel>
                    <Columns>
                        <ext:Column runat="server" DataIndex="id" Text="编号"></ext:Column>
                        <ext:Column runat="server" DataIndex="name" Text="名称" Flex="1"></ext:Column>
                    </Columns>
    
                </ColumnModel>
            </ext:GridPanel>
        </form>
    </body>
    </html>
    can show in grid panel , another problem , when I upload a excel , the first row in the excel can not import to the store in the grid panel.
    may be there is sth. wrong with LoadDataFromExcel
    Last edited by tobros; Aug 27, 2013 at 2:42 AM.
  4. #4
    What is the first row?

Similar Threads

  1. Access Store's Data From Code Behind
    By shaileshsakaria in forum 2.x Help
    Replies: 0
    Last Post: Feb 16, 2013, 7:23 AM
  2. Replies: 2
    Last Post: Mar 15, 2012, 12:57 AM
  3. Replies: 3
    Last Post: Jul 24, 2011, 1:57 PM
  4. [CLOSED] How to get data from a store using code behind?
    By flormariafr in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Mar 07, 2010, 6:32 PM
  5. [CLOSED] Add data to grid store from code behind
    By Sharon in forum 1.x Legacy Premium Help
    Replies: 7
    Last Post: May 05, 2009, 8:17 AM

Posting Permissions