Asp.netおよびモジュールでWebページを実行しているときに、FileUpLoad
を使用してExcelアーカイブを選択し、ボタンインポートをクリックします。これまでは大丈夫です。ただし、他のExcelアーカイブを選択してインポートボタンをクリックするよりも、GridView
をクリアしてエラーを表示しないでください。私はこれに似た他の質問を見ているので、これを試みます。
これでグリッドをロードします
_Conn = string.Format(Conn, DireccionArchivo, MostrarHDR);
OleDbConnection ConnExcel = new OleDbConnection(Conn);
OleDbCommand CmdExcel = new OleDbCommand();
OleDbDataAdapter Oda = new OleDbDataAdapter();
DataTable Dt = new DataTable();
CmdExcel.Connection = ConnExcel;
ConnExcel.Open();
CmdExcel.CommandText = "SELECT * From ["Page1$"]";
Oda.SelectCommand = CmdExcel;
Oda.Fill(Dt);
ConnExcel.Close();
grdResultados.Caption = Path.GetFileName(DireccionArchivo);
grdResultados.DataSource = Dt;
grdResultados.DataBind();
_
そしてこれで、GridView
をクリアし、最後に呼び出されたyがGridView
をロードする新しいメソッドを呼び出します
_DataTable ds = new DataTable();
ds = null;
grdResultados.DataSource = ds;
grdResultados.DataBind();
_
2回目に呼び出されたときに表示されるエラーはgrdResultados.DataBind();
にあります。
GridViewをクリアするよりもすぐに問題を解決しました
DataTable ds = new DataTable();
ds = null;
grdResultados.DataSource = ds;
grdResultados.DataBind();
これはGridViewをクリアしますが、列の名前をクリアしないでください。これはエラーであり、列の名前も消去する必要があります。列を削除するには:
for (int i = 0; grdResultados.Columns.Count > i; )
{
grdResultados.Columns.RemoveAt(i);
}
ロードのメソッドでは、GridViewはこのプロパティを使用して列を自動的に生成する必要があります。
grdResultados.AutoGenerateColumns = true;
他の人が同じ問題を抱えている場合に備えて、これを残します
Null値を使用するだけです:
grdResultados.DataSource = null;
grdResultados.DataBind();
これを試して
grdResultados.DataSource = null;
または
grdResultados.Rows.Clear();
次に、gridviewを再バインドします
int gvHasRows = grdResultados.Rows.Count;
if (gvHasRows > 0)
{
grdResultados.Columns.Clear();
grdResultados.DataBind();
}
クリアする前に、Gridviewにデータがあることを最初に確認します。行にはクリア機能はありません。
セッションを使用する場合は、セッションをクリアします例:
DataTable ds = new DataTable();
ds = null;
GV.DataSource = ds;
GV.DataBind();
for (int i = 0; GV.Columns.Count > i; )
{
GV.Columns.RemoveAt(i);
}
ViewState["CurrentData"] = null;
列名だけで空のデータテーブルを作成し、再バインドします
これを簡単に行うことができます:
GridView1.SelectedIndex = -1;