- PR -

DataGrid内のTextBoxなどのイベント取得方法

投稿者投稿内容
ZEP
会議室デビュー日: 2002/07/04
投稿数: 17
投稿日時: 2002-09-26 16:43
いつも拝見させていただいております。

DataGrid内に作成したTextBoxのイベントは取得できないでしょうか?
やりたいことは、DataGrid内にTextBox1とTextBox2を用意します。
TextBox1に値が入力され、フォーカスが移動したときにデータベースへ
アクセスしその結果をTextBox2にセットする。

どなたかご教授の程よろしくお願い致します。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-09-26 18:55
WebFormsでしょうか?WindowsFormsでしょうか?。

WebFormsの場合には無理だと思います。おそらく(苦笑)。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
sou
ベテラン
会議室デビュー日: 2002/09/25
投稿数: 56
投稿日時: 2002-09-27 01:16
WebFormでもAutoPostBackを使えばできると思いますよ。
AutoPostBack="True"にし、TextChangedイベントを使用すればできるはずです。
ただ、DataGrid内でTextChangedイベントを使ったことは無いので断言はできません。
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-09-27 05:30
>WebFormでもAutoPostBackを使えばできると思いますよ。
>AutoPostBack="True"にし、TextChangedイベントを使用すればできるはずです。
>ただ、DataGrid内でTextChangedイベントを使ったことは無いので断言はできません。

実現すると確かに便利な機能だと思いますが、正直動きませんでした。
そもそもバウンドカラムではコントロールがサーバーによって生成されるため、
イベントそのものをどう設定してやればよいかわかりませんでした。
次にテンプレートカラムで試してみましたが、テキストボックスに
イベントを設定したところ、ページそのものの生成でエラーが
発生してしまいました。

どなたか、うまくいったという方がおられれば是非教えてください。

ところで、単にデータの検索結果をテキストボックスに反映させるだけであれば
TextBox1のカラムをテンプレートカラムにし、TextBoxの後ろにボタン
コントロールをおき、そのボタンコントロールを押したときに発生する
ページロードで検索の処理をするとかいうことはどうですか。



うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-09-27 13:46
>WebFormでもAutoPostBackを使えばできると思いますよ。
>AutoPostBack="True"にし、TextChangedイベントを使用すればできるはずです。
>ただ、DataGrid内でTextChangedイベントを使ったことは無いので断言はできません。

僕も実際、かなりやってみたのですが、DataGrid内に配置されたコントロールは、実行時に名前が入れ替わってしまうので、一つについて制御するすべがないというか、イベントが起きないんです。(コマンドボタンの押下についてだけは方法が別にあるので問題ない)

なにか方法があるのでしょうか・・・?






_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
ZEP
会議室デビュー日: 2002/07/04
投稿数: 17
投稿日時: 2002-09-27 13:56
>WebFormでもAutoPostBackを使えばできると思いますよ。
>AutoPostBack="True"にし、TextChangedイベントを使用すればできるはずです。
>ただ、DataGrid内でTextChangedイベントを使ったことは無いので断言はできません。

DataGrid内のコントロールをAutoPostBackにしTextChangedイベントを使用すれば
実務レベルで使用できるかわかりませんが一応できました。

DataGrid内のTextBoxの値を入力したらLabelに表示するサンプルです。
可能かどうかチェックしたためコードは汚いですがご了承下さい。

public void txtCode_TextChange(object sender, System.EventArgs e)
{
TextBox t = (TextBox)sender;
string cid = t.ClientID.Replace("txtCode","lblName");
int ctrlno = 0;
for (int i=0;i<100;i++)
{
if (cid.IndexOf(i.ToString()) > 0)
{
ctrlno = i;
break;
}
}
ctrlno -= 2;
Label l = (Label)dgDetail.Items[ctrlno ].FindControl("lblName");
l.Text = ctrlno .ToString();

DataTable Dt = (DataTable)Session["detail"];
ctrlno += 1;
foreach(DataRow Drow in Dt.Rows)
{
if (Drow[0].ToString() == ctrlno .ToString())
{
Drow[1] = t.Text;
Drow[2] = l.Text;
break;
}
}
Session["detail"] = Dt;
Dt.Dispose();
BindDataGrid();
}
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-09-28 01:08
そうですかZEPさんできたんですか。おめでとうございます。
ASP.NETの底力はまだまだあるんですね。

ところで

>DataGrid内のコントロールをAutoPostBackにしTextChangedイベントを
>使用すれば実務レベルで使用できるかわかりませんが一応できました。

ということですが、どうやってDataGrid内のコントロールにAutoPostBackを
割り当てて、TextChangedイベントプロシージャーをしているのかが
わからなかったのですが、もしさしつかえなければASPX側の設定を
教えてもらうことはできませんか。

そこの部分がいくらやってもうまくいかなかったので。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2002-09-28 07:49
NamingContainerを使用すると簡単にできます。
この例は、TextBoxのTextChangedイベントでTextBoxに入力した値を
Labelに複写しています。

コード:

Sub txtCustomerName_TextChanged(source As Object, e As EventArgs)
Dim oTextBox As TextBox = CType(source, TextBox)
Dim oContainer As DataGridItem = CType(oTextBox.NamingContainer, DataGridItem)
Dim oLabel As Label = CType(oContainer.FindControl("lblCustomerName"), Label)
oLabel.Text = oTextBox.Text
End Sub

<Columns>
<asp:TemplateColumn HeaderText="Customer Name">
<ItemTemplate>
<asp:Label id="lblCustomerName" runat="server"
Text='<%# Container.DataItem("CustomerName") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="txtCustomerName" runat="server"
Text='<%# Container.DataItem("CustomerName") %>'
MaxLength="40"
AutoPostBack="True"
OnTextChanged="txtCustomerName_TextChanged" />
<asp:Label id="lblCustomerName" runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>




[ メッセージ編集済み 編集者: Dr ADO.NET 編集日時 2002-09-28 07:54 ]

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