- - PR -
[ASP.NET C#] DataGridのセルの値を取得したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-08-04 14:45
はじめて投稿させていただきます。
C#を使い始めて数ヶ月の初心者ですが なにとぞよろしくお願いします。 SQL ServerのデータベースのデータをDataGridに 表示させることはできたのですが、DataGridのセル の値を読み取ることができません。 (読み取ろうとすると、値が空になってしまいます) ご教授お願いいたします。 -[.aspx.csのソースです]------------------------------------------------ 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; using System.Data.SqlClient; using System.Diagnostics; namespace MemberList2 { /// <summary> /// EditJob の概要の説明です。 /// </summary> public class EditJob : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid DataGrid1; protected System.Web.UI.WebControls.Label Label6; protected System.Web.UI.WebControls.Label Label1; private void Page_Load(object sender, System.EventArgs e) { if (!IsPostBack) // 初めて読込時 { // ページを初期化するユーザー コードをここに挿入します。 SqlConnection myConnection = new SqlConnection("Initial Catalog=スケジュール管理;" + "Data Source=(local);User ID='sa';Password=''"); SqlDataAdapter myCommand = new SqlDataAdapter("SELECT " + "* FROM [業務データ];",myConnection); DataSet ds=new DataSet(); myConnection.Open(); myCommand.Fill(ds,"業務データ"); myConnection.Close(); DataGrid1.DataSource = ds; DataGrid1.DataBind(); } } #region Web フォーム デザイナで生成されたコード override protected void OnInit(EventArgs e) { // // CODEGEN: この呼び出しは、ASP.NET Web フォーム デザイナで必要です。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 /// </summary> private void InitializeComponent() { this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand); this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e) { // Label6.Text = DataGrid1.SelectedItem.DataSetIndex.ToString(); } private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { if(e.CommandName=="Select") { Label6.Text = DataGrid1.Items[0].Cells[0].Text; //←ここがうまく動かない } } } } | ||||
|
投稿日時: 2004-08-04 14:58
としたらうまくいきませんか? #ちなみに、DataGrid1.Items[0]は通常の行ではありません。 #DataGrid1.Items[0].ItemTypeを参照すれば分かると思います。 | ||||
|
投稿日時: 2004-08-04 15:26
NAL-6295 さん、ご返答ありがとうございます。
早速ためさせていただきましたが、値は空のままでした。 また、 Label6.Text = DataGrid1.Items[★].Cells[★].Text; の★の箇所に実際に存在する数値(1,2など)を代入して みましたが、やはり変わりませんでした。 | ||||
|
投稿日時: 2004-08-04 15:55
VBのコードで恐縮ですが、トレースを有効にすることによりDataGridの構造が解り易くなります。
# 先人の方々に感謝です <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebForm1" Trace="True" %> またDataGrid内のコントロール配置等によっても取得方法が変わってくるようです。 ex) CType(Me.DataGrid1.Controls(0).Controls(0).FindControl("LabelControl1"), Label).Text | ||||
|
投稿日時: 2004-08-04 17:38
こうしてみたらどうでしょう?
Label6.Text = ((TableCell)e.Item.Controls[0]).Text; | ||||
|
投稿日時: 2004-08-04 17:50
C#は分からないのですが値の取得部分が間違っているのではなくて
DataGrid1_ItemCommand()が呼び出されていないのではないでしょうか? データバインドの後に値の取得部分を試しに入れてみると正常に取れることが 確認出来ると思います。 DataGrid1.DataBind(); Label6.Text = DataGrid1.Items[0].Cells[0].Text; ←適当な数値を | ||||
|
投稿日時: 2004-08-04 18:35
えんぞ@見習さん,noderaさん,きちさん
ご教授、どうもありがとうございます。 -------------------------------------------------------------------------- Label6.Text = ((TableCell)e.Item.Controls[0]).Text; で置き換えてみましたが、やはり空のままでした。 -------------------------------------------------------------------------- 「DataGrid1_ItemCommand()が呼び出されていないのではないでしょうか?」 については、ステップインの機能を使って呼び出されていることは確認しました。 DataGrid1.DataBind(); Label6.Text = DataGrid1.Items[★].Cells[★].Text; (★:適当な数値) で試してみましたが、この時点でもセルの値を取得することができませんでした。 -------------------------------------------------------------------------- <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebForm1" Trace="True" %>を使ってみたら、DataGridの構造の詳細などが 出てきました。でも現状の自分ではその書かれていることがなんとなく分かる(想像できる) レベルでしかなかったので、それらしい数値等を入れてもう少しがんばってみようと思います。 | ||||
|
投稿日時: 2004-08-05 09:23
Webフォームデザイナ側のDataGridコード部分をご提示して戴ければ、的確なアドバイスが
できるかなと思います。 |