- PR -

DataTableの設定をしなければなりません。

1
投稿者投稿内容
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-27 14:19
いつもお世話になっております。
C#.NETでWeb開発しております。
いろいろ調べたのですが、いまいち理解できなかったため質問させてください。

やりたいことは、DataGridのソートです。
private void Page_Load(省略)//編集しました。
{
  if(Request["search"])
  {
    dataView1.Table = DataSet1.Tables["test"];// ←これで設定したつもりです。(追記)
    DataGrid1.DataSource = dataView1;
    DataGrid1.DataBind();
  }
}
でグリッドは表示された状態です。
イベントは、
private void DataGrid1_SortCommand(省略)
{
  dataView1.Sort = e.SortExpression;// ←エラー
  DataGrid1.DataBind();
}
と記述しました。(MSDNそのまんま)
上記のコメントの部分でエラーになってしまいます。
内容は、件名通りです。
デバッグでみると、dataView1.Tableが<未定義の値>です。
まさしく、初歩のエラーです。
dataView1はWebコントロールで貼り付けただけです。
なにを設定、記述すればよろしいのでしょうか。
ご助言お願い致します。




[ メッセージ編集済み 編集者: BB.NK 編集日時 2004-02-27 15:49 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-27 17:06
で、DataViewの方のMSDNページはご覧になりましたか?

dv = DataTable.DefaultView
dv = New DataView(DataTable)

#DataView.TableはReadOnlyだと思ったが?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-02-27 17:14
NAL-6295です。

で、そのDataSet1は何処に保存されているのですか?
特に保存していないのであれば、ポストバックした時には残っていません。

ので、そのような結果になるでしょう。

#ちなみに、DataView.Tableは取得、設定、共に出来ます。

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-27 17:15 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-27 17:19
DataView.Tableプロパティですがヘルプをみると
「現在の値が null の場合は、 Table プロパティだけを設定できます。」
とのことです。ややこしい・・・
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-27 17:47
つまり、、、
DataSetをどこかへ保存しておいて
SortCommandイベントでDataSetからDataViewを作成するということでしょうか?

それで、DataSetを保存するということは、、、。
また、レスします。

//以下追加です。
//因みに、省略していました
private void Page_Load(省略)
{
  if(Request["search"])
  {
    //省略
    OracleDataAdapter DA = new OracleDataAdapter(sql,cnn);
    DataSet DS = new DataSet("test");
    DA.Fill(DS,"test");
    //この前は省略していました。
    dataView1.Table = DataSet1.Tables["test"];
    DataGrid1.DataSource = dataView1;
    DataGrid1.DataBind();
  }
}


[ メッセージ編集済み 編集者: BB.NK 編集日時 2004-02-27 18:10 ]
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-27 19:04
できました!(テンプレートはまだ手をつけていませんが。。。)

まず、DataSetをはじめに作った際にDataViewをつくっても意味がない。。。
ViewStateを使って、DataSetの内容を保存する。
次に、SortCommandイベントでViewStateからDataViewを作成。
の流れでできました。

ありがとうございました。
引き続き、テンプレートでもやってみます。(昇降も)
躓いたらお願い致します。

コード:
private void Page_Load(省略) 
{ 
  if(条件) 
  { 
    //省略 
    OracleDataAdapter DA = new OracleDataAdapter(sql,cnn); 
    DataSet DS = new DataSet("test"); 
    DA.Fill(DS,"test"); 
    DataGrid1.DataSource = DS.Tables["test"]; 
    DataGrid1.DataBind(); 
    ViewState["test"] = DS.Tables["test"];
  } 
} 
/////////////
private void DataGrid1_SortCommand(省略) 
{ 
  dataView1.Table = (DataTable)ViewState["test"];
  dataView1.Sort = e.SortExpression;
  DataGrid1.DataSource = dataView1;
  DataGrid1.DataBind(); 
}

BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-27 20:41
できました。part2

列にはBoundColumnとTemplateが混じっているので、
DataGridのItemCommandイベントで全てソートさせるようにしました。

コード:
private void DataGrid1_ItemCommand(object source,省略 e)
{
  string strSORT = "";
  if(ViewState.IsItemDirty("sort"))
  {
    strSORT = ViewState["sort"].ToString();
  }
  else
  {
    strSORT = " ASC";
  }
  dataView1.Table = (DataTable)ViewState["test"];

  dataView1.Sort = e.CommandArgument.ToString() + strSORT;
  DataGrid1.DataSource = dataView1;
  DataGrid1.DataBind();
  //この後は、strSORTの入替え
}

1

スキルアップ/キャリアアップ(JOB@IT)