ciao,
ho creato delle DataColumn e le ho aggiunte ad un dataTable.
Ho associato il dataTable al Datasource del Datagrid.
Gestisco l'evento di ordinamento del DataGrid,e in questo metodo definisco un DataView che avvolge il dataTable.
Sfruttando la proprietà Sort del DataView e il secondo argomento "e",voglio riuscire ad ordinare i dati del dataGrid ma ottengo sempre l'errore "Impossibile trovare la ColumnX" dove X è il numero della colonna che clicco per l'ordinamento.

Ecco il codice :

codice:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace QuellocheCerco
{
	/// <summary>
	/// Summary description for WebForm1.
	/// </summary>
	public class WebForm1 : System.Web.UI.Page
	{
		protected System.Web.UI.WebControls.TextBox txtRagSoc;
		protected System.Web.UI.WebControls.DropDownList cmbRegione;
		protected System.Web.UI.WebControls.DropDownList cmbProvincia;
		protected System.Web.UI.WebControls.DropDownList cmbLocalita;
		protected System.Web.UI.WebControls.TextBox txtZona;
		protected System.Web.UI.WebControls.DropDownList cmbSegnalato;
		protected System.Web.UI.WebControls.Button Button1;
		protected System.Web.UI.WebControls.Label lblRisultati;
		protected System.Web.UI.WebControls.DropDownList cmbStelle;
		protected System.Data.OleDb.OleDbConnection cn;
		protected System.Web.UI.WebControls.DataGrid mioDataGrid;

		private System.Data.DataSet risultati;
		private System.Data.DataTable dt=new System.Data.DataTable();
		private System.Data.DataColumn Column1=new System.Data.DataColumn("Column1");
		private System.Data.DataColumn Column2=new System.Data.DataColumn("Column2");
		private System.Data.DataColumn Column3=new System.Data.DataColumn("Column3");
		private System.Data.DataColumn Column4=new System.Data.DataColumn("Column4");
		

		private void Page_Load(object sender, System.EventArgs e)
		{
			lblRisultati.Visible=false;
			if(!IsPostBack==true)
			{
				
				try
				{
					cn.ConnectionString=MyGlobal.cnString;
					System.Data.OleDb.OleDbDataAdapter da=new System.Data.OleDb.OleDbDataAdapter("Select * from Regioni Order by Descrizione",cn);
					
					System.Data.DataSet ds=new System.Data.DataSet();

					cn.Open();
					da.Fill(ds,"Regioni");

					//popolo la combo delle regioni
					cmbRegione.DataSource=ds.Tables["Regioni"];
					cmbRegione.DataValueField="IDRegione";
					cmbRegione.DataTextField="Descrizione";
					cmbRegione.DataBind();
					cmbRegione.Items.Insert(0,"Non specificare una regione...");

					da=new System.Data.OleDb.OleDbDataAdapter("Select * from Segnalato",cn);
					da.Fill(ds,"Segnalato");

					cmbSegnalato.DataSource=ds.Tables["Segnalato"];
					cmbSegnalato.DataValueField="IDSegnalato";
					cmbSegnalato.DataTextField="Descrizione";
					cmbSegnalato.DataBind();

				}
				catch
				{
					
				}
				finally
				{
					cn.Close();
					cn.Dispose();
				}
			}
		}

		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{    
			this.cn = new System.Data.OleDb.OleDbConnection();
			this.cmbRegione.SelectedIndexChanged += new System.EventHandler(this.cmbRegione_SelectedIndexChanged);
			this.cmbProvincia.SelectedIndexChanged += new System.EventHandler(this.cmbProvincia_SelectedIndexChanged);
			this.Button1.Click += new System.EventHandler(this.Button1_Click);
			this.mioDataGrid.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.mioDataGrid_SortCommand);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		private void cmbRegione_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			try
			{
				MyGlobal.IDRegioneCorrente=int.Parse(cmbRegione.SelectedItem.Value);
			}
			catch
			{}

			if(cmbRegione.SelectedIndex!=0)
			{
				MyCombo.RiempiCombo(cmbProvincia,MyGlobal.IDRegioneCorrente,"Provincie","FKIDRegione","IDProvincia","Descrizione");
			}
			else
			{
				cmbProvincia.Items.Clear();
				cmbLocalita.Items.Clear();
				
				cmbProvincia.Items.Insert(0,"Non specificare una provincia");
				cmbLocalita.Items.Insert(0,"Non specificare una località");
			}
		}

		private void cmbProvincia_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			try
			{
				MyGlobal.IDProvinciaCorrente=int.Parse(cmbProvincia.SelectedItem.Value);
			}
			catch
			{}

			if(cmbProvincia.SelectedIndex!=0)
			{
				MyCombo.RiempiCombo(cmbLocalita,MyGlobal.IDProvinciaCorrente,"Localita","FKIDProvincia","IDLocalita","Descrizione");
			}
			else
			{
				cmbLocalita.Items.Clear();
				cmbLocalita.Items.Insert(0,"Non specificare una località...");
			}
		}

		private void Button1_Click(object sender, System.EventArgs e)
		{
			string query="";
			query="select * from Hotel where 1=1";
			string where="";


			//Inizio di costruzione della query parametrica...
			if(txtRagSoc.Text.Length!=0)
			{
				where=" and Ragsoc Like '%" + txtRagSoc.Text + "%'";
			}

			if(cmbRegione.SelectedIndex!=0)
			{
				where=where + " and FKIDRegione=" + int.Parse(cmbRegione.SelectedItem.Value);
			}

			if(cmbProvincia.SelectedIndex!=0)
			{
				where=where + " and FKIDProvincia=" + int.Parse(cmbProvincia.SelectedItem.Value);
			}

			if(cmbLocalita.SelectedIndex!=0)
			{
				where=where + " and FKIDLocalita=" + int.Parse(cmbLocalita.SelectedItem.Value);
			}

			if(txtZona.Text.Length!=0)
			{
				where=where + " and zone Like '%" + txtZona.Text +"%'";
			}

			if(cmbSegnalato.SelectedIndex!=0)
			{
				where=where + " and FKIDSegnalato="+ int.Parse(cmbSegnalato.SelectedItem.Value);
			}

			if(cmbStelle.SelectedIndex!=0)
			{
				where=where + " and NStelle="+ int.Parse(cmbStelle.SelectedItem.Value);
			}
			
			query=query + where;
			RiempiDataGrid(query);

		}

		private void RiempiDataGrid(string query)
		{
			System.Data.OleDb.OleDbConnection cn=new System.Data.OleDb.OleDbConnection(MyGlobal.cnString);
			System.Data.OleDb.OleDbDataAdapter da=new System.Data.OleDb.OleDbDataAdapter(query,cn);
			risultati=new System.Data.DataSet();
			
			dt.Columns.Add(Column1);
			dt.Columns.Add(Column2);
			dt.Columns.Add(Column3);
			dt.Columns.Add(Column4);


			System.Data.DataRow nuovaRiga;

			try
			{
				cn.Open();
				da.Fill(risultati,"Hotel");
			}
			catch{}
					
			foreach(System.Data.DataRow row in risultati.Tables["Hotel"].Rows)
			{
                nuovaRiga=dt.NewRow();
				dt.Rows.Add(nuovaRiga);
				
				string testo2Colonna=row["RagSoc"] + "
" + row["Telefono"];
				
				nuovaRiga[Column1]=row["IDHotel"];
				nuovaRiga[Column2]=testo2Colonna;
				nuovaRiga[Column3]="Camere: " + row["NCamere"];
				//nuovaRiga[col4]=row["IDHotel"];
			}

			mioDataGrid.DataSource=dt;
			mioDataGrid.DataBind();
		}

		private void mioDataGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
		{
			System.Data.DataView dv=new System.Data.DataView(dt);
			dv.Sort=e.SortExpression.ToString();
			mioDataGrid.DataSource=dv;
			mioDataGrid.DataBind();		
		}
	}
}

Dove sbaglio ?
Grazie dell'aiuto.