Solved

Need some help to understand a problem about DataGrid and DataTable

Posted on 2006-06-20
3
367 Views
Last Modified: 2008-02-01
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
Comment
Question by:m-jansen
  • 2
3 Comments
 
LVL 7

Accepted Solution

by:
whityum earned 250 total points
ID: 16945964
you commented out the DataBind(), therefore it never binds to the data, remove the //
0
 

Author Comment

by:m-jansen
ID: 16946579
Sorry. I have now removed the // there, but I can still not see any data
0
 

Author Comment

by:m-jansen
ID: 16946648
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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

In this Article, I will provide a few tips in problem and solution manner. Opening an ASPX page in Visual studio 2003 is very slow. To make it fast, please do follow below steps:   Open the Solution/Project. Right click the ASPX file to b…
Today is the age of broadband.  More and more people are going this route determined to experience the web and it’s multitude of services as quickly and painlessly as possible. Coupled with the move to broadband, people are experiencing the web via …
This video discusses moving either the default database or any database to a new volume.
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now