- PR -

DataGridの内容を各々で変更

1
投稿者投稿内容
3m
常連さん
会議室デビュー日: 2004/11/05
投稿数: 34
投稿日時: 2005-01-06 11:23
いつもお世話になっております。
WebMatrixにてASP.NET(VB)でWebアプリ開発をしております。
初心者ですので扱い方がいまいちわかっておらず
表題の件でどのようにすればいいのか悩んでいます。

検索画面を作成中なのですが、検索時にDataGridを使って表示しています。
そこでしたいことなのですが…。
2つのテーブル(DB)より検索をかけ、2つのテーブル毎に表示内容を
変えるということです。
説明の仕方が悪いのでわかっていただけるか…。

例)<DB>テーブルA
     テーブルB
<表示内容>テーブルA:A番号
      テーブルB:B番号

DataGridはテンプレートで作成しており、ItemDataBoundでラベルにて「A番号」「B番号」を切り替えようと思いました。

Sub objGrd_ItemCreated(sender As object,e As DataGridItemEventArgs)
  Dim Text As String
  Text = CType(e.Item.FindControl("lblShain"),Label).text
  If Text = "社員" Then
    CType(e.Item.FindControl("lblText"),Label).text = "A番号"
  End If
End Sub

としてみたのですが…上記のコードでは動かなかったのと、よくよく考えてみるとテーブルAから取ってきたデータなのかテーブルBから取ってきたデータなのかも考えなければならないと気づきました。

このような時はどのようにすればいいのでしょうか?
よろしくお願いします。
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2005-01-06 11:51
詳細が分からないのではずしているかもしれませんが、DBからデータを取得する際にUNIONで1つのデータとして取得するのが一番楽だと思います。

# 「ItemDataBoundで」となっているのにコードが「ItemCreated」になっているのは、
# 単なる間違いですよね?
3m
常連さん
会議室デビュー日: 2004/11/05
投稿数: 34
投稿日時: 2005-01-21 17:33
Ten.さんお返事ありがとうございます。
返事が遅くなりすみません。

>「ItemDataBoundで」となっているのにコードが「ItemCreated」になっているのは、
>単なる間違いですよね?
はい…。

この件に関しては
Dim myDataGridItem As DataGridItem
For Each myDataGridItem In objGrd.Items
CType(myDataGridItem.FindControl("lblText"),Label).text = "A番号"
Next
とすることで解決しました!!

しかし…

datagrid内のラベルのテキストを変更することはできたのですが…
データバインドの値も変更したく思っています。

<td>社員番号:<%# Container.DataItem("社員番号") %></td>

上記のタグの<%# Container.DataItem("社員番号A") %>の部分を
<%# Container.DataItem("社員番号B") %>に動的に変えることはできるのでしょうか?
このようなことはできないのでしょうか?
分かりづらい説明ですみません。

よろしくお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-01-21 19:55
手っ取り早い方法としては、DataGridを二つ用意して、不要な方を.Visble = falseにするとか。
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2005-01-25 11:38
今回の例に限らず、データバインドする値をいろいろと変更したいことはよくあるので、私の場合はTemplateColumnにしてコードビハインドに定義したメソッドを呼ぶようにしています。

基本的には以下のような感じになります。

aspx側
コード:
<asp:TemplateColumn HeaderText="社員番号">
<ItemTemplate>
<asp:Literal runat="server" Text='<%# GetShainBango(Container.DataItem) %>'>
</asp:Literal>
</ItemTemplate>
</asp:TemplateColumn>



コードビハインド側
コード:
Protected Function GetShainBango(ByVal row As DataRowView) As String
    ' 社員番号Aまたは社員番号Bを返す処理
        ・
        ・
End Function



上記の例では DataRowView を引数にしていますが、必要なければ特定の列の値だけ渡すほうがメソッドの意図が分かりやすくなると思います。
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2005-01-26 10:01
引用:

datagrid内のラベルのテキストを変更することはできたのですが…
データバインドの値も変更したく思っています。

<td>社員番号:<%# Container.DataItem("社員番号") %></td>

上記のタグの<%# Container.DataItem("社員番号A") %>の部分を
<%# Container.DataItem("社員番号B") %>に動的に変えることはできるのでしょうか?
このようなことはできないのでしょうか?



うわっ、初めて引用使いました。かんどー。

ASPX側で
<%# Container.DataItem("社員番号" + GetColumnName()) %>

としてやり
ASPX.CS側で(C#ですが)
public string GetColumnName()
{
  if (条件)
    return "A";
  else
    return "B";
}
で動的に参照先を切り替えられるはずです。
コードビハインドでしか開発していないので
WebMatrixでうまくいくかは不明です。


[ メッセージ編集済み 編集者: べーちゃん 編集日時 2005-01-26 10:05 ]
1

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