• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 376
  • Last Modified:

Need some help to understand a problem about DataGrid and DataTable

Hello. I need some help to understand an error in this code. This is all the code and it compiles in VS2005. I get problems at this comment down the code:
            // Here the problems start. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
The problem is that DataGrid1 don't want to show any data.

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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 runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
    </div>
   
    <asp:DataGrid ID="DataGrid1" runat="server" />&nbsp;&nbsp;<br />
        <br />
        Sheet:<br />
        <asp:DropDownList ID="DropDownList1" runat="server" Width="127px">            
        </asp:DropDownList><br />
        <br />
        Range:<br />
        <asp:TextBox ID="TextBox1" runat="server" Width="82px"></asp:TextBox>
        <br />
        <br />
        Pk:<br />
        <asp:TextBox ID="TextBox2" runat="server" Width="91px"></asp:TextBox><br />
        <br />
        &nbsp;<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Load" />
        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Get" /><br />
        <br />
        Error:<br />
        <asp:Label ID="Label1" runat="server"></asp:Label>
        <br />
        <br />
        debug:<br />
        <asp:Label ID="lblDebug" runat="server" Height="89px" Text="Label" Width="310px"></asp:Label>
   
    </form>
</body>
</html>


using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;

using System.Drawing;
using System.Collections;
using System.ComponentModel;

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using utilities;

public partial class _Default : System.Web.UI.Page
{
    private DataTable _dt;
    private DataSet myDataSet = new DataSet();
    private string _strExcelFilename;
    private ExcelReader _exr = null;
    private int _intPKCol = -1;
    private string error ="";


    protected void Page_Load(object sender, EventArgs e)
    {
        // dataGrid1
        //
        this.DataGrid1.DataMember = "";
        this.DataGrid1.TabIndex = 1;        
       
        Label1.Text = error;
        TextBox1.Text = "A1:C6";
    }

    private void InitExcel(ref ExcelReader exr)
    {
        //ExcelReader must be open
        if (exr == null)
        {
            exr = new ExcelReader();
            exr.ExcelFilename = _strExcelFilename;
            exr.Headers = false;
            exr.MixedData = true;
        }
        if (_dt == null) _dt = new DataTable("par");
        exr.KeepConnectionOpen = true;

        //Check excel sheetname is selected
        if (this.DropDownList1.SelectedIndex > -1)
        {
            exr.SheetName = this.DropDownList1.Text;
            lblDebug.Text += this.DropDownList1.Text;
        }
        else
            throw new Exception("Select a sheet first!");

        //Set excel sheet range
        exr.SheetRange = this.TextBox1.Text;
        lblDebug.Text += this.TextBox1.Text;
    }

    private void RetrieveSheetnames()
    {
        try
        {
            this.DropDownList1.Items.Clear();

            if (_exr != null)
            {
                _exr.Dispose();
                _exr = null;
            }

            _exr = new ExcelReader();
            _exr.ExcelFilename = _strExcelFilename;
            _exr.Headers = false;
            _exr.MixedData = true;
            string[] sheetnames = _exr.GetExcelSheetNames();

            // Add items to the DropDownList
            for(int i = 0; i<sheetnames.Length; i++ )
            {
                this.DropDownList1.Items.Add(sheetnames[i].ToString());
            }
        }
        catch (Exception ex)
        {
            //MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            error += ex.Message + " Error ";
        }
    }

    private bool IsInt(string strNr)
    {
        try
        {
            int intNr = int.Parse(strNr);
            return true;

        }
        catch
        {
            return false;
        }
    }
   
    private void SetPK()
    {
        //Cursor = Cursors.WaitCursor;
        _intPKCol = -1;
        try
        {
            if (TextBox2.Text.Length > 0)
            {
                if (IsInt(TextBox2.Text))
                    _intPKCol = Convert.ToInt32(TextBox2.Text);
                else
                {
                    if (_dt.Columns.Contains(TextBox2.Text))
                    {
                        _intPKCol = _dt.Columns[TextBox2.Text].Ordinal;
                    }
                    else
                    {
                        throw new Exception("Columnname is not present in the table.!");

                    }
                }
                if (_dt.Columns.Count <= _intPKCol)
                {
                    _intPKCol = -1;
                    //Cursor = Cursors.Default;
                    throw new Exception("Column does not exists!");
                }
            }
            //Cursor = Cursors.Default;
        }

        catch (Exception ex)
        {
            //Cursor = Cursors.Default;            
            //MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            error += ex.Message + " Error ";
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
           
            //Cursor = Cursors.WaitCursor;
            InitExcel(ref _exr);
           
           
           
            // Here the problems start. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // It looks like the code dont want to run any longer from here. Please help me.
            _dt = _exr.GetTable();
           
            //this.lblGetValueData.Text = _exr.GetValue(txtCell.Text).ToString();          
            DataGrid1.DataSource = _dt;
            //this.DataGrid1.DataBind();

            _exr.Close();
            _exr.Dispose();
            _exr = null;
            //Cursor = Cursors.Default;
            if (_dt != null && this.TextBox2.Text.Length > 0) SetPK();
        }
        catch (Exception ex)
        {
            //Cursor = Cursors.Default;
            //MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            error += ex.Message + " Error ";
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        //OpenFileDialog f = new OpenFileDialog();
        //f.Filter = "Excel files | *.xls";
        //f.InitialDirectory = Application.ExecutablePath;

        //if (f.ShowDialog() == DialogResult.OK)
            //if (f.FileName != null && f.CheckFileExists == true)
            //{
                this._strExcelFilename = "C:/tmp/Book1.xls";
                this.TextBox3.Text = _strExcelFilename;
                RetrieveSheetnames();
                if (this.DropDownList1.Items.Count > 0)
                    DropDownList1.SelectedIndex = 0;
            //}
    }
}




using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace utilities
{

    /// <summary>
    /// Summary description for ExcelReader.
    /// </summary>
    public class ExcelReader : IDisposable
    {
        #region Variables
        private int[] _PKCol;
        private string _strExcelFilename;
        private bool _blnMixedData = true;
        private bool _blnHeaders = false;
        private string _strSheetName;
        private string _strSheetRange;
        private bool _blnKeepConnectionOpen = false;
        private OleDbConnection _oleConn;
        private OleDbCommand _oleCmdSelect;
        private OleDbCommand _oleCmdUpdate;
        #endregion

        #region properties

        public int[] PKCols
        {
            get { return _PKCol; }
            set { _PKCol = value; }
        }

        public string ColName(int intCol)
        {
            string sColName = "";
            if (intCol < 26)
                sColName = Convert.ToString(Convert.ToChar((Convert.ToByte((char)'A') + intCol)));
            else
            {
                int intFirst = ((int)intCol / 26);
                int intSecond = ((int)intCol % 26);
                sColName = Convert.ToString(Convert.ToByte((char)'A') + intFirst);
                sColName += Convert.ToString(Convert.ToByte((char)'A') + intSecond);
            }
            return sColName;
        }

        public int ColNumber(string strCol)
        {
            strCol = strCol.ToUpper();
            int intColNumber = 0;
            if (strCol.Length > 1)
            {
                intColNumber = Convert.ToInt16(Convert.ToByte(strCol[1]) - 65);
                intColNumber += Convert.ToInt16(Convert.ToByte(strCol[1]) - 64) * 26;
            }
            else
                intColNumber = Convert.ToInt16(Convert.ToByte(strCol[0]) - 65);
            return intColNumber;
        }



        public string[] GetExcelSheetNames()
        {

            System.Data.DataTable dt = null;

            try
            {
                if (_oleConn == null) Open();

                // Get the data table containing the schema
                dt = _oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                if (dt == null)
                {
                    return null;
                }

                string[] excelSheets = new string[dt.Rows.Count];
                int i = 0;

                // Add the sheet name to the string array.
                foreach (DataRow row in dt.Rows)
                {
                    string strSheetTableName = row["TABLE_NAME"].ToString();
                    excelSheets[i] = strSheetTableName.Substring(0, strSheetTableName.Length - 1);
                    i++;
                }


                return excelSheets;
            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                // Clean up.
                if (this.KeepConnectionOpen == false)
                {
                    this.Close();
                }
                if (dt != null)
                {
                    dt.Dispose();
                    dt = null;
                }
            }
        }

        public string ExcelFilename
        {
            get { return _strExcelFilename; }
            set { _strExcelFilename = value; }
        }

        public string SheetName
        {
            get { return _strSheetName; }
            set { _strSheetName = value; }
        }

        public string SheetRange
        {
            get { return _strSheetRange; }
            set
            {
                if (value.IndexOf(":") == -1) throw new Exception("Invalid range length");
                _strSheetRange = value;
            }
        }

        public bool KeepConnectionOpen
        {
            get { return _blnKeepConnectionOpen; }
            set { _blnKeepConnectionOpen = value; }
        }

        public bool Headers
        {
            get { return _blnHeaders; }
            set { _blnHeaders = value; }
        }

        public bool MixedData
        {
            get { return _blnMixedData; }
            set { _blnMixedData = value; }
        }
        #endregion

        #region Methods



        #region Excel Connection
        private string ExcelConnectionOptions()
        {
            string strOpts = "";
            if (this.MixedData == true)
                strOpts += "Imex=2;";
            if (this.Headers == true)
                strOpts += "HDR=Yes;";
            else
                strOpts += "HDR=No;";
            return strOpts;
        }



        private string ExcelConnection()
        {
            return
                @"Provider=Microsoft.Jet.OLEDB.4.0;" +
                @"Data Source=" + _strExcelFilename + ";" +
                @"Extended Properties=" + Convert.ToChar(34).ToString() +
                @"Excel 8.0;" + ExcelConnectionOptions() + Convert.ToChar(34).ToString();
        }
        #endregion


        #region Open / Close
        public void Open()
        {
            try
            {
                if (_oleConn != null)
                {
                    if (_oleConn.State == ConnectionState.Open)
                    {
                        _oleConn.Close();
                    }
                    _oleConn = null;
                }

                if (System.IO.File.Exists(_strExcelFilename) == false)
                {
                    throw new Exception("Excel file " + _strExcelFilename + "could not be found.");
                }
                _oleConn = new OleDbConnection(ExcelConnection());
                _oleConn.Open();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Close()
        {
            if (_oleConn != null)
            {
                if (_oleConn.State != ConnectionState.Closed)
                    _oleConn.Close();
                _oleConn.Dispose();
                _oleConn = null;
            }
        }
        #endregion

        #region Command Select
        private bool SetSheetQuerySelect()
        {
            try
            {
                if (_oleConn == null)
                {
                    throw new Exception("Connection is unassigned or closed.");
                }

                if (_strSheetName.Length == 0)
                    throw new Exception("Sheetname was not assigned.");

                _oleCmdSelect = new OleDbCommand(
                    @"SELECT * FROM ["
                    + _strSheetName
                    + "$" + _strSheetRange
                    + "]", _oleConn);

                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }


        }
        #endregion

        #region simple utilities
        private string AddWithComma(string strSource, string strAdd)
        {
            if (strSource != "") strSource = strSource += ", ";
            return strSource + strAdd;
        }

        private string AddWithAnd(string strSource, string strAdd)
        {
            if (strSource != "") strSource = strSource += " and ";
            return strSource + strAdd;
        }
        #endregion

        private OleDbDataAdapter SetSheetQueryAdapter(DataTable dt)
        {
            // Deleting in Excel workbook is not possible
            //So this command is not defined
            try
            {




                if (_oleConn == null)
                {
                    throw new Exception("Connection is unassigned or closed.");
                }


                if (_strSheetName.Length == 0)
                    throw new Exception("Sheetname was not assigned.");

                if (PKCols == null)
                    throw new Exception("Cannot update excel sheet with no primarykey set.");
                if (PKCols.Length < 1)
                    throw new Exception("Cannot update excel sheet with no primarykey set.");

                OleDbDataAdapter oleda = new OleDbDataAdapter(_oleCmdSelect);
                string strUpdate = "";
                string strInsertPar = "";
                string strInsert = "";
                string strWhere = "";


                for (int iPK = 0; iPK < PKCols.Length; iPK++)
                {
                    strWhere = AddWithAnd(strWhere, dt.Columns[iPK].ColumnName + "=?");
                }
                strWhere = " Where " + strWhere;

                for (int iCol = 0; iCol < dt.Columns.Count; iCol++)
                {
                    strInsert = AddWithComma(strInsert, dt.Columns[iCol].ColumnName);
                    strInsertPar = AddWithComma(strInsertPar, "?");
                    strUpdate = AddWithComma(strUpdate, dt.Columns[iCol].ColumnName) + "=?";
                }

                string strTable = "[" + this.SheetName + "$" + this.SheetRange + "]";
                strInsert = "INSERT INTO " + strTable + "(" + strInsert + ") Values (" + strInsertPar + ")";
                strUpdate = "Update " + strTable + " Set " + strUpdate + strWhere;


                oleda.InsertCommand = new OleDbCommand(strInsert, _oleConn);
                oleda.UpdateCommand = new OleDbCommand(strUpdate, _oleConn);
                OleDbParameter oleParIns = null;
                OleDbParameter oleParUpd = null;
                for (int iCol = 0; iCol < dt.Columns.Count; iCol++)
                {
                    oleParIns = new OleDbParameter("?", dt.Columns[iCol].DataType.ToString());
                    oleParUpd = new OleDbParameter("?", dt.Columns[iCol].DataType.ToString());
                    oleParIns.SourceColumn = dt.Columns[iCol].ColumnName;
                    oleParUpd.SourceColumn = dt.Columns[iCol].ColumnName;
                    oleda.InsertCommand.Parameters.Add(oleParIns);
                    oleda.UpdateCommand.Parameters.Add(oleParUpd);
                    oleParIns = null;
                    oleParUpd = null;
                }

                for (int iPK = 0; iPK < PKCols.Length; iPK++)
                {
                    oleParUpd = new OleDbParameter("?", dt.Columns[iPK].DataType.ToString());
                    oleParUpd.SourceColumn = dt.Columns[iPK].ColumnName;
                    oleParUpd.SourceVersion = DataRowVersion.Original;
                    oleda.UpdateCommand.Parameters.Add(oleParUpd);
                }
                return oleda;
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        #region command Singe Value Update
        private bool SetSheetQuerySingelValUpdate(string strVal)
        {
            try
            {
                if (_oleConn == null)
                {
                    throw new Exception("Connection is unassigned or closed.");
                }

                if (_strSheetName.Length == 0)
                    throw new Exception("Sheetname was not assigned.");

                _oleCmdUpdate = new OleDbCommand(
                    @" Update ["
                    + _strSheetName
                    + "$" + _strSheetRange
                    + "] set F1=" + strVal, _oleConn);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }


        }
        #endregion



        public void SetPrimaryKey(int intCol)
        {
            _PKCol = new int[1] { intCol };
        }

        public DataTable GetTable()
        {
            return GetTable("ExcelTable");
        }

        private void SetPrimaryKey(DataTable dt)
        {
            try
            {
                if (PKCols != null)
                {
                    //set the primary key
                    if (PKCols.Length > 0)
                    {
                        DataColumn[] dc;
                        dc = new DataColumn[PKCols.Length];
                        for (int i = 0; i < PKCols.Length; i++)
                        {
                            dc[i] = dt.Columns[PKCols[i]];
                        }


                        dt.PrimaryKey = dc;

                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable GetTable(string strTableName)
        {
            try
            {
                //Open and query
                if (_oleConn == null) Open();
                if (_oleConn.State != ConnectionState.Open)
                    throw new Exception("Connection cannot open error.");
                if (SetSheetQuerySelect() == false) return null;

                //Fill table
                OleDbDataAdapter oleAdapter = new OleDbDataAdapter();
                oleAdapter.SelectCommand = _oleCmdSelect;
                DataTable dt = new DataTable(strTableName);
                oleAdapter.FillSchema(dt, SchemaType.Source);
                oleAdapter.Fill(dt);
                if (this.Headers == false)
                {
                    if (_strSheetRange.IndexOf(":") > 0)
                    {
                        string FirstCol = _strSheetRange.Substring(0, _strSheetRange.IndexOf(":") - 1);
                        int intCol = this.ColNumber(FirstCol);
                        for (int intI = 0; intI < dt.Columns.Count; intI++)
                        {
                            dt.Columns[intI].Caption = ColName(intCol + intI);
                        }
                    }
                }
                SetPrimaryKey(dt);
                //Cannot delete rows in Excel workbook
                dt.DefaultView.AllowDelete = false;

                //Clean up
                _oleCmdSelect.Dispose();
                _oleCmdSelect = null;
                oleAdapter.Dispose();
                oleAdapter = null;
                if (KeepConnectionOpen == false) Close();
                return dt;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        private void CheckPKExists(DataTable dt)
        {
            if (dt.PrimaryKey.Length == 0)
                if (this.PKCols != null)
                {
                    SetPrimaryKey(dt);
                }
                else
                    throw new Exception("Provide an primary key to the datatable");
        }
        public DataTable SetTable(DataTable dt)
        {
            try
            {
                DataTable dtChanges = dt.GetChanges();
                if (dtChanges == null) throw new Exception("There are no changes to be saved!");
                CheckPKExists(dt);
                //Open and query
                if (_oleConn == null) Open();
                if (_oleConn.State != ConnectionState.Open)
                    throw new Exception("Connection cannot open error.");
                if (SetSheetQuerySelect() == false) return null;

                //Fill table
                OleDbDataAdapter oleAdapter = SetSheetQueryAdapter(dtChanges);

                oleAdapter.Update(dtChanges);
                //Clean up
                _oleCmdSelect.Dispose();
                _oleCmdSelect = null;
                oleAdapter.Dispose();
                oleAdapter = null;
                if (KeepConnectionOpen == false) Close();
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #region Get/Set Single Value

        public void SetSingleCellRange(string strCell)
        {
            _strSheetRange = strCell + ":" + strCell;
        }

        public object GetValue(string strCell)
        {
            SetSingleCellRange(strCell);
            object objValue = null;
            //Open and query
            if (_oleConn == null) Open();
            if (_oleConn.State != ConnectionState.Open)
                throw new Exception("Connection is not open error.");

            if (SetSheetQuerySelect() == false) return null;
            objValue = _oleCmdSelect.ExecuteScalar();

            _oleCmdSelect.Dispose();
            _oleCmdSelect = null;
            if (KeepConnectionOpen == false) Close();
            return objValue;
        }

        public void SetValue(string strCell, object objValue)
        {

            try
            {

                SetSingleCellRange(strCell);
                //Open and query
                if (_oleConn == null) Open();
                if (_oleConn.State != ConnectionState.Open)
                    throw new Exception("Connection is not open error.");

                if (SetSheetQuerySingelValUpdate(objValue.ToString()) == false) return;
                objValue = _oleCmdUpdate.ExecuteNonQuery();

                _oleCmdUpdate.Dispose();
                _oleCmdUpdate = null;
                if (KeepConnectionOpen == false) Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (_oleCmdUpdate != null)
                {
                    _oleCmdUpdate.Dispose();
                    _oleCmdUpdate = null;
                }
            }

        }
        #endregion


        #endregion

        public

        #region Dispose / Destructor
 void Dispose()
        {
            if (_oleConn != null)
            {
                _oleConn.Dispose();
                _oleConn = null;
            }
            if (_oleCmdSelect != null)
            {
                _oleCmdSelect.Dispose();
                _oleCmdSelect = null;
            }
            // Dispose of remaining objects.
        }
        #endregion

        #region CTOR
        public ExcelReader()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        #endregion
    }
}
0
m-jansen
Asked:
m-jansen
  • 2
1 Solution
 
whityumCommented:
you commented out the DataBind(), therefore it never binds to the data, remove the //
0
 
m-jansenAuthor Commented:
Sorry. I have now removed the // there, but I can still not see any data
0
 
m-jansenAuthor Commented:
I figured it out by my self. This solved my problem.

    protected void Page_Load(object sender, EventArgs e)
    {
        // dataGrid1
        //
        this.TextBox3.Text = "C:/tmp/Book1.xls";

        _strExcelFilename = this.TextBox3.Text;        

        if (System.IO.File.Exists(this.TextBox3.Text))
            RetrieveSheetnames();      
       
        Label1.Text = error;
        TextBox1.Text = "A1:C6";
    }

0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now