- PR -

[ASP.NET C#] DataGridのセルの値を取得したい

投稿者投稿内容
saki_st
会議室デビュー日: 2004/08/04
投稿数: 4
投稿日時: 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; //←ここがうまく動かない
}
}
}
}
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-08-04 14:58
引用:

saki_stさんの書き込み (2004-08-04 14:45) より:
Label6.Text = DataGrid1.Items[e.Item.ItemIndex].Cells[0].Text; //←ここがうまく


としたらうまくいきませんか?

#ちなみに、DataGrid1.Items[0]は通常の行ではありません。
#DataGrid1.Items[0].ItemTypeを参照すれば分かると思います。
saki_st
会議室デビュー日: 2004/08/04
投稿数: 4
投稿日時: 2004-08-04 15:26
NAL-6295 さん、ご返答ありがとうございます。

早速ためさせていただきましたが、値は空のままでした。

また、
Label6.Text = DataGrid1.Items[★].Cells[★].Text;
の★の箇所に実際に存在する数値(1,2など)を代入して
みましたが、やはり変わりませんでした。
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 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
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-08-04 17:38
こうしてみたらどうでしょう?

Label6.Text = ((TableCell)e.Item.Controls[0]).Text;
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-08-04 17:50
C#は分からないのですが値の取得部分が間違っているのではなくて
DataGrid1_ItemCommand()が呼び出されていないのではないでしょうか?

データバインドの後に値の取得部分を試しに入れてみると正常に取れることが
確認出来ると思います。
DataGrid1.DataBind();
Label6.Text = DataGrid1.Items[0].Cells[0].Text; ←適当な数値を
saki_st
会議室デビュー日: 2004/08/04
投稿数: 4
投稿日時: 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/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-08-05 09:23
Webフォームデザイナ側のDataGridコード部分をご提示して戴ければ、的確なアドバイスが
できるかなと思います。

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