- PR -

DataGridでクリックしたセルの値を取得したい

1
投稿者投稿内容
ももんじゃ
会議室デビュー日: 2006/08/11
投稿数: 6
投稿日時: 2006-08-11 12:17
ASP.Net(2003)でDataGridを使用しています。
グリッド上でクリックされたセルの値を取得したいのですが
やり方がさっぱりわかりません。
どなたかわかる方いますでしょうか?

今月はじめたばかりのASP初心者ですのでお願いします
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-08-11 12:49
各セルの中の項目をリンクボタンかなにかにしておいて、そこに値も埋め込んでおいて
クリックしたらページが呼び出されるといった形にする必要がありそうですね。

#他にやり方あるかなぁ。
ももんじゃ
会議室デビュー日: 2006/08/11
投稿数: 6
投稿日時: 2006-08-11 16:56
早速の返信ありがとうございます。
やっぱりその手になりますか。
初心者なりにリンクボタンにすれば出来そうな予感はあったのですが、
見た目が美しくないですよねー・・・。

何とかお盆休み前にと思っていましたが休み明けに作業してみます。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-11 17:57
引用:
グリッド上でクリックされたセルの値を取得したいのですが

<TC>をクリックしたらってことですよね。値をとりたいのはサーバでってことですよね。

値保存用のhiddenかなんかを用意しておいて、セルがクリックされたら(onclick)値を
hiddenに入れてsubmitするようなjavascriptを、DataGridのItemCreatedあたりで埋めればよいかと。
しゅう
会議室デビュー日: 2005/08/16
投稿数: 6
投稿日時: 2006-08-11 18:06
DataGridじゃないんですが。
似たような処理で、学校の授業等で使う時間割表の
ユーザーコントロールを使ってました。

以下、うろ覚えのコードですが・・・

------------------------------------------------------------
public class MyUserControl : System.Web.UI.UserControl
{
 protected System.Web.UI.WebControls.Table TimeTable;
 public event System.Web.UI.WebControls.CommandEventHandler OnCommand;

 public void MakeTimeTable()
 {
  int iRowCurrent; // Current row
  int iCellCurrent; // Current cell
  int iRowCnt = 6; // 時限数
  int iCellCnt = 5 ;// 曜日数(月〜金)

  for(iRowCurrent=1; iRowCurrent <= iRowCnt; iRowCurrent++)
  {
   TableRow tRow = new TableRow();
   TimeTable.Rows.Add(tRow);
 
   for (iCellCurrent = 1; iCellCurrent <= iCellCnt; iCellCurrent++)
   {
    TableCell tCell = new TableCell();
    ImageButton imgbutton = new ImageButton();
    imgbutton.ImageUrl="image.gif";
//ImageButtonのCommandNameに列と行の値を設定
    imgbutton.CommandName = iCellCurrent.ToString()+iRowCurrent.ToString() ;
    imgbutton.Command += new CommandEventHandler(ClickImage);
 
    tCell.Controls.Add(imgbutton);
 
    tRow.Cells.Add(tCell);
   }
  }
 }

 private void ClickImage(Object sender,CommandEventArgs e)
 {
  OnCommand(sender, e);
 }
}

//以下、実装側
protected MyUserControl myUserControl;

//InitializeComponentかどこかに以下を記述
myUserControl.MakeTimeTable();
myUserControl.OnCommand += new CommandEventHandler(this.OnClickmyUserControl);

//クリックされたときのイベント
private void OnClickmyUserControl(object sender, CommandEventArgs e)
{
//e.CommandNameで何曜日の何時限がクリックされたのかを判断
string comname = e.CommandName;
}

------------------------------------------------------------
iRowCurrentとiCellCurrentは1から始めてますが、
実際は0から始めてヘッダーとして使ってたと思います。
なので、月曜1限のimgbutton.CommandNameは11、月曜2限なら12、
火曜1限なら21といった具合です。

結局はどっとねっとふぁんさんの意見と似たようなもんですが。
ももんじゃ
会議室デビュー日: 2006/08/11
投稿数: 6
投稿日時: 2006-08-24 15:42
遅くなりました。
結局JavaScriptのonClickを使用して処理を行いました。

aspx.csのDataGrid1_ItemDataBoundイベント処理内
こんな感じで記入

foreach( DataGridItem selectCol in DataGrid1.Items )
{
selectCol.Cells[0].Attributes["onClick"]="javascript:Form1.TextBox1.value=this.innerHTML";
selectCol.Cells[1].Attributes["onClick"]="javascript:Form1.TextBox2.value=this.innerHTML";
//全セル上記と同様の処理を記入
}

(ちなみにセルの内容をテキストボックスに表示するコードです)

皆さんありがとうございました <(_ _)>
1

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