65.9K
CodeProject is changing. Read more.
Home

Xml Editor: Work with DataTable, DataView and DataGrid

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (8 votes)

Oct 2, 2006

viewsIcon

39193

downloadIcon

526

Lets Work with XML, DataTable, DataView and DataGrid

Sample Image - Xml_Editor.jpg

Introduction

Currently, I work on a web design project. I created a MenuCreator which is based on XML files. Then, the client the XML files are hard to maintain, since he knows not much about computer. Therefore, I created a simple XML editor with datagrid

Work With....

XML, DataTable, DataView, DataGrid

Step:

1. Load DataTable from XML

2. Bind DataTable to DataGrid

3. Work with DataGrid

  • Insert a new row into n-position
  • Edit a data row in a datagrid
  • Delete a data row in a datagrid
  • Move a data row up
  • Move a data row down
  • The data row GOTO n-position

4. Write back to XML

CODE...

There are thousand samples with edit and delete a dataRow in datagrid samples on web

So...i just put Insert a new row into n-position and Move up,down and GOTO ON...

INSERT INTO

 private void addNewRow()
  {   
   if(this.isGoodIndex( TB_newDrPosition.Text))
   {
    int newRp = int.Parse(TB_newDrPosition.Text);
    DataTable dt = (DataTable) this.Session[this._SessionName];
    DataRow dr = dt.NewRow();
    dr["Id"] = newRp;
    dt.Rows.InsertAt(dr,newRp);
    this.reorderId(dt);
    this.Session["xmlTable"] =dt;
    DataView dv = dt.DefaultView;
    dv.Sort = "Id";
    this.newRowFlag.Value = "1";
    this.DataGrid1.DataSource = dv;
    this.DataGrid1.EditItemIndex = newRp;//dt.Rows.Count-1;
    this.DataGrid1.DataBind();
   }
   else
   {
    this.LWarning.Text = "<a class='warning' >" + 
                                             "Bad Index Input </a>";
   }
  }

Item MOVE MOVE MOVE AND GOTO

In this programe, moving row up and down is just switch rows around.

ItemCommand in DataGrid

private void DataGrid1_ItemCommand(object source, 
        System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   int selectedIndex = e.Item.ItemIndex;
   DataTable dt = this.takeOutDt();//(DataTable) this.Session[_SessionName];
   switch(e.CommandName.Trim())
   {
    case "SelectUp":
     if(selectedIndex == 0)
     {
      this.LWarning.Text = "<a class='warning' >" + 
         "Top row can not be moved up, there is no heaven</a>";
     }
     else
     {
      this.SwitchRows(dt,selectedIndex, selectedIndex-1);
     }
     break;
    case "SelectDown":
     if( selectedIndex == dt.Rows.Count-1)
     {
      this.LWarning.Text = "<a class='warning' >" + 
             "Botton Row can not be moved down, there is no hell</a>";
     }
     else
     {
      this.SwitchRows(dt,selectedIndex, selectedIndex+1);
     }
     break;
    case "SelectGoto":
     string _index = ((TextBox)e.Item.FindControl("gotowhere")).Text;
     if(this.isGoodIndex(_index))
     {
      int index = int.Parse(_index);
      this.dtGoTo(dt, selectedIndex, index);
     }
     break;
   }
   this.throwBackDt(dt);
   dTtoXml(dt, this._filePath,this._xmlStyle, this._XMLdtTag,this._XMLdrTag);
   DataView dv = dt.DefaultView;
   dv.Sort = "Id";
   this.DataGrid1.DataSource = dv;
   this.DataGrid1.DataBind();
  }

Switch rows

 private void SwitchRows(DataTable _dt, int i, int j)
  {
   object[] _iRow = _dt.Rows[i].ItemArray;
   object[] _jRow = _dt.Rows[j].ItemArray;
   _dt.Rows[i].ItemArray = _jRow;
   _dt.Rows[j].ItemArray = _iRow;
  }

GOTO

  private void dtGoTo(DataTable dt , int curI, int newI)
  {
   DataRow holder = copyRowAt(curI, dt);
   dt.Rows.RemoveAt(curI);
   this.reorderId(dt);
   dt.Rows.InsertAt(holder, newI);
   this.reorderId(dt);
   this.throwBackDt(dt);
   dTtoXml(dt, this._filePath,this._xmlStyle, this._XMLdtTag,this._XMLdrTag);
   this.DataGrid1.DataSource = dt.DefaultView;
   this.DataGrid1.DataBind();
  }

Thanks

Thanks for million of articles from web.

It is not really good code.....yet...

Thank you for Viewing...