C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: asp.netでのデータグリッド 扱い方


(過去ログ 66 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■38745 / inTopicNo.1)  asp.netでのデータグリッド 扱い方
  
□投稿者/ とまと (3回)-(2009/07/24(Fri) 13:51:20)

分類:[ASP.NET (VB)] 

いつもお世話になっています。

データグリッドのドロップダウンリストなどをテンプレート列で作成し、そこへデータをバインドさせたいのですが、テンプレート列がテキストボックスやラベルでは、

<ItemTemplate>
<asp:TextBox ID = "〜" runat = "server"
Text = '<%# DataBinder.Eval(Container.DataItem, "〜") %>'>
</asp:TextBox>
</ItemTemplate>

で実際にデータをバインドさせることができたのですが、ドロップダウンリストではTextがサポートさせていないのでバインドすることができません。リストの項目自体はデータグリッドのデータネームフィールドとデータバリューフィールドを使用してバインドしましたが、それはあくまで更新などをする際に、表示したいデータと値の取得を目的としたものなので、元々あったデータをバインドする方法がわからず困っています。

もしよければご教授お願い致します。または参考になるサイトなどご存知でしたら教えていただけないでしょうか?

また、削除で任意の列をクリックした際に、その列の行番号を取得する方法がわかりません。viewではcurrentrowの様な式があったのですがデータグリッドにはそのような機能はないのでしょうか。

こちらもお願い致します。

環境はVS2005でasp.netでvbを使用しています。accessは2003です。
引用返信 編集キー/
■38746 / inTopicNo.2)  Re[1]: asp.netでのデータグリッド 扱い方
□投稿者/ ごう (23回)-(2009/07/24(Fri) 14:04:27)


こちらを参考にして、がんばってください。
(HTML側のコードを変更するところがミソです)

【GridViewの編集時DropDownListから選択させる】
http://jsajax.com/aspGridView/Chapter1/ch1-14.aspx
引用返信 編集キー/
■38747 / inTopicNo.3)  Re[2]: asp.netでのデータグリッド 扱い方
□投稿者/ とまと (5回)-(2009/07/24(Fri) 14:12:13)
No38746 (ごう さん) に返信
>
>
> こちらを参考にして、がんばってください。
> (HTML側のコードを変更するところがミソです)
>
> 【GridViewの編集時DropDownListから選択させる】
> http://jsajax.com/aspGridView/Chapter1/ch1-14.aspx

すみません。早速のお返事ありがとうございます。
このEditのアイテムテンプレートをなしで同様の方法をしたいのですが何か良い案は
あるでしょうか?編集ボタンを作成せずにアイテムテンプレートからドロップダウンリスト
で表示、値を取得して更新などはできないのですかね・・
引用返信 編集キー/
■38748 / inTopicNo.4)  Re[3]: asp.netでのデータグリッド 扱い方
□投稿者/ ごう (24回)-(2009/07/24(Fri) 14:24:19)
> このEditのアイテムテンプレートをなしで同様の方法をしたいのですが何か良い案は
> あるでしょうか?編集ボタンを作成せずにアイテムテンプレートからドロップダウンリスト
> で表示、値を取得して更新などはできないのですかね・・


私が教えたサイトでは、 
<EditItemTemplate>
 <asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource2"
    DataTextField="CategoryName" 
    DataValueField="CategoryID"
    SelectedValue='<%# Bind("CategoryID") %>'>
  </asp:DropDownList>
</EditItemTemplate>
                                
↑
このように、EditItemTemplateタグの中にDropDownListを配置してますけど、
これにこだわらずに考えましょう。
普通に、ItemTemplateタグの中にDropDownListを配置するように書き直せばいいんじゃないでしょうか。

<ItemTemplate>
 <asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource2"
    DataTextField="CategoryName" 
    DataValueField="CategoryID"
    SelectedValue='<%# Bind("CategoryID") %>'>
  </asp:DropDownList>
</ItemTemplate>

↑こんな感じ。

#まずはやってみて!

引用返信 編集キー/
■38753 / inTopicNo.5)  Re[4]: asp.netでのデータグリッド 扱い方
□投稿者/ とまと (6回)-(2009/07/24(Fri) 14:54:21)
No38748 (ごう さん) に返信
>
>>このEditのアイテムテンプレートをなしで同様の方法をしたいのですが何か良い案は
>>あるでしょうか?編集ボタンを作成せずにアイテムテンプレートからドロップダウンリスト
>>で表示、値を取得して更新などはできないのですかね・・
>
>
> 私が教えたサイトでは、
> <EditItemTemplate>
>  <asp:DropDownList ID="DropDownList1" runat="server"
> DataSourceID="SqlDataSource2"
> DataTextField="CategoryName"
> DataValueField="CategoryID"
> SelectedValue='<%# Bind("CategoryID") %>'>
> </asp:DropDownList>
> </EditItemTemplate>
>
> ↑
> このように、EditItemTemplateタグの中にDropDownListを配置してますけど、
> これにこだわらずに考えましょう。
> 普通に、ItemTemplateタグの中にDropDownListを配置するように書き直せばいいんじゃないでしょうか。
>
> <ItemTemplate>
>  <asp:DropDownList ID="DropDownList1" runat="server"
> DataSourceID="SqlDataSource2"
> DataTextField="CategoryName"
> DataValueField="CategoryID"
> SelectedValue='<%# Bind("CategoryID") %>'>
> </asp:DropDownList>
> </ItemTemplate>
>
> ↑こんな感じ。
>
> #まずはやってみて!

ありがとうございます。すみません説明足らずで。Html側では表示だけにしたいので

<ItemTemplate>
 <asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</ItemTemplate>

今のソースはこれにしています。
それでvb側で、

SQL = "select ~ from ~"
Ds = New DataSet()
テーブル作成

表示件数分リスト作成したいので

i = 数値

For i = 0 to grid.items.count-1
aaa = Dg.Items(i).Findcontrol("〜")

aaa.データソース = データセットテーブル
aaa.バリューフィールド = 列名の欲しい値
aaa.テキストフィールド = 表示する値
aaa.バインド()

next

としています。Html側ですることと同様の処理をしていると思いますが、これとは別に
検索で始めに表示したものもVB側からバインドさせたいです。

引用返信 編集キー/
■38755 / inTopicNo.6)  Re[5]: asp.netでのデータグリッド 扱い方
□投稿者/ ごう (26回)-(2009/07/24(Fri) 15:13:28)
やりたいことを落ち着いて整理してみてください。
何点か、確認させてください。

1. SqlDataSource コントロールを、HTML側に作成して
そこにSQLを設定しておけばいんじゃないのかな?と思うのですが
そうできない理由はありますか?
SQL文を動的に作成しているとか?
SqlDataSourceを使ったことがないとか?

2. aaaというのが良く分かりません。DropDownListのことを言っている?

3.
>Html側ですることと同様の処理をしていると思いますが、これとは別に
>検索で始めに表示したものもVB側からバインドさせたいです。

これの意味が分かりません。SQL文で検索したもののこと?




引用返信 編集キー/
■38756 / inTopicNo.7)  Re[6]: asp.netでのデータグリッド 扱い方
□投稿者/ とまと (7回)-(2009/07/24(Fri) 16:00:15)
No38755 (ごう さん) に返信
> やりたいことを落ち着いて整理してみてください。
> 何点か、確認させてください。
>
> 1. SqlDataSource コントロールを、HTML側に作成して
> そこにSQLを設定しておけばいんじゃないのかな?と思うのですが
> そうできない理由はありますか?
> SQL文を動的に作成しているとか?
> SqlDataSourceを使ったことがないとか?
>
> 2. aaaというのが良く分かりません。DropDownListのことを言っている?
>
> 3.
> >Html側ですることと同様の処理をしていると思いますが、これとは別に
> >検索で始めに表示したものもVB側からバインドさせたいです。
>
> これの意味が分かりません。SQL文で検索したもののこと?

ありがとうございます。
SqlDataSourceは今初めて使いましたが、やはり同様の処理をしていました。

すみません。定義が
aaaはDropDownListです。

目的が
まず、検索ボタンを押下した際にデータグリッドへ検索件数分表示する。その際、性別と役職はドロップダウンリスト、その他はテキストです。

ここで始めに検索で性別、役職をDBからバインドさせたいのですが、バインドができないのがまず一点です。

そして、リストを作成。これはvb側、元々とっていた方法と先ほど紹介していただいたhtml側からsqldataを使用して、役職だけのデータをバインドする。

'--------------------------------------------------------
SQL = "select ~ from ~"
Ds = New DataSet()
テーブル作成

表示件数分リスト作成したいので

i = 数値

For i = 0 to grid.items.count-1
aaa DropDownList = Dg.Items(i).Findcontrol("〜")

aaa.データソース = データセットテーブル
aaa.バリューフィールド = 列名の欲しい値
aaa.テキストフィールド = 表示する値
aaa.バインド()

next
'--------------------------------------------------------

'--------------------------------------------------------
<ItemTemplate>
<asp:DropDownList ID = "Drop" runat = "server"
DataSourceID="AccessDataSource1" DataTextField="表示する値"
DataValueField="取得したい値" SelectedValue='<%# Bind("〜")
%>'>
</asp:DropDownList>
</ItemTemplate>
'--------------------------------------------------------

この部分なのですが、上の結果は同じでしたが今回ここでやりたいことが
例えば、検索側でSQLを役職コードでLEFTJOINで結合したものをまず、
最初に表示する。そしてリストには、役職名(表示名)と役職コード(取得したい値)
を作って、変更した際にはその取得した値から役職名を更新したい。

<ItemTemplate>
<asp:DropDownList ID = "Drop" runat = "server"
DataSourceID="AccessDataSource1" DataTextField="表示する値"
DataValueField="取得したい値" SelectedValue='<%# Bind("〜")
%>'


(Text = '<%# DataBinder.Eval(Container.DataItem, "元のバインドしたいデータ") % >'>

理想はこうしたい。のです。

>
</asp:DropDownList>
</ItemTemplate>

ただ、この形をどう作ったら良いかわからずとほうに暮れています。
長文失礼しました。
引用返信 編集キー/
■38765 / inTopicNo.8)  Re[7]: asp.netでのデータグリッド 扱い方
□投稿者/ gtk2k (16回)-(2009/07/24(Fri) 17:34:10)
SelectedValueでだめなん?って思うんだが。
とりあえず、2つのテーブルが以下のように作成

Table_1
name  | sex_id
---------------
dameeo | 0
dameko | 1

Table_2
sex_id | sex
---------------
0   | 男
1   | 女

んで、aspxに以下のソースをコピペ
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1" DataKeyNames="name">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField HeaderText="sex" SortExpression="sex">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SqlDataSource2" DataTextField="sex" DataValueField="sex_id" SelectedValue='<%# Bind("sex_id") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("sex") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="name" HeaderText="name" ReadOnly="True"
SortExpression="name" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:hogeConnectionString %>"

SelectCommand="SELECT [Table_2].[sex], [Table_1].[sex_id], [Table_1].[name] FROM [Table_1] LEFT JOIN [Table_2] ON [Table_1].sex_id = [Table_2].sex_id"
DeleteCommand="DELETE FROM [Table_1] WHERE [name] = @name"
InsertCommand="INSERT INTO [Table_1] ([sex_id], [name]) VALUES (@sex_id, @name)"

UpdateCommand="UPDATE [Table_1] SET [sex_id] = @sex_id WHERE [name] = @name">
<DeleteParameters>
<asp:Parameter Name="name" Type="String" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="sex_id" Type="String" />
<asp:Parameter Name="name" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="sex_id" Type="String" />
<asp:Parameter Name="name" Type="String" />
</InsertParameters>
</asp:SqlDataSource>

</div>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:hogeConnectionString %>"
SelectCommand="SELECT [sex_id], [sex] FROM [Table_2]"></asp:SqlDataSource>
</form>
</body>
</html>

web.configファイルに以下の項目を追加
<configuration>
<connectionStrings>
<add name="tanakalogConnectionString" connectionString="接続文字列"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

以上
sex列がテンプレート列でドロップリストとなっている。


このような動作をさせたいと理解してんだが、違うのか?
引用返信 編集キー/
■38766 / inTopicNo.9)  Re[7]: asp.netでのデータグリッド 扱い方
□投稿者/ ごう (27回)-(2009/07/24(Fri) 17:34:40)
>SqlDataSourceは今初めて使いましたが、やはり同様の処理をしていました。
 → すみませんが、私にはこの意味がとらえられませんでした。
   
>aaaはDropDownList
 → 了解しました。

問題をひとつひとつ解決していきましょう。
まずは、画面(HTML)についてです。
初期画面は、まっさらな状態(GridViewに何もデータを表示しない状態)で、
「検索」ボタンをクリックしたときに、
「社員テーブル」から何かしらの条件をつけて検索したデータを表示する、ということがやりたいのですね?
まずGridViewにデータを表示してるのは、AccessDataSourceを使用しているのでしょうか?

次に、このとき、「性別と役職だけをDropDownListに表示したいんだけど、まずそれが出来ない」ということでいいですね?

性別と役職のドロップダウンリストの中身はどのようにしたいんでしょうか?
性別は男/女しかないけど、
aaa.バリューフィールド = 列名のほしい値 → 「性別ID」か何か?それとも「男/女」とか「M/F」とかの値を使ってる?
aaa.テキストフィールド = 表示する値   → 「男/女」だよね?
役職は「役職テーブル」かなにか別に作ってあって、そこに存在する役職IDや役職名を使用する?
bbb.バリューフィールド = 列名のほしい値 → 「役職ID」でいい?
bbb.テキストフィールド = 表示する値   → 「役職名」だよね?


※次の返信は22時過ぎる予定です。

P.S. 蛇足ですが、とまとさんお使いのVisual Studio 2005(.NET 2.0)で用意されている表形式のコントロールは
DataGridではなくてGridViewだと思いますがDataGridもあるの?


引用返信 編集キー/
■38769 / inTopicNo.10)  Re[8]: asp.netでのデータグリッド 扱い方
□投稿者/ gtk2k (17回)-(2009/07/24(Fri) 18:03:09)
ごうさん、俺ととまとさんを混同してない?
引用返信 編集キー/
■38774 / inTopicNo.11)  Re[8]: asp.netでのデータグリッド 扱い方
□投稿者/ ごう (28回)-(2009/07/24(Fri) 19:50:18)
>gtk2k さん
混同はしてないですよ。
当方が書き込んだ後にgtk2kさんの書き込みに気付きました。

# P.S.については、とまとさんが、「データグリッド」という単語を使っていたのが少し気になったので
引用返信 編集キー/
■38782 / inTopicNo.12)  Re[9]: asp.netでのデータグリッド 扱い方
□投稿者/ ごう (29回)-(2009/07/24(Fri) 21:53:31)
>とまとさん

お望みのアプリケーションは、こんな感じですか?
http://blogs.wankuma.com/aomushigou/archive/2009/07/24/179240.aspx


>この部分なのですが、上の結果は同じでしたが今回ここでやりたいことが
>例えば、検索側でSQLを役職コードでLEFTJOINで結合したものをまず、
>最初に表示する。そしてリストには、役職名(表示名)と役職コード(取得したい値)
>を作って、変更した際にはその取得した値から役職名を更新したい。

><ItemTemplate>
><asp:DropDownList ID = "Drop" runat = "server"
>DataSourceID="AccessDataSource1" DataTextField="表示する値"
>DataValueField="取得したい値" SelectedValue='<%# Bind("〜")
>%>'


>(Text = '<%# DataBinder.Eval(Container.DataItem, "元のバインドしたいデータ") % >'>
>↑
>理想はこうしたい。のです。


お役に立てずすみませんが、上記の文章がどのようにしたいのかが私には理解できませんでした。
引用返信 編集キー/
■38791 / inTopicNo.13)  Re[10]: asp.netでのデータグリッド 扱い方
□投稿者/ ごう (30回)-(2009/07/25(Sat) 00:17:04)
No38782 (ごう さん) に返信
> >とまとさん
>
> お望みのアプリケーションは、こんな感じですか?
> http://blogs.wankuma.com/aomushigou/archive/2009/07/24/179240.aspx

お節介ですが、作り方をまとめました。
ご参考になれば。
http://blogs.wankuma.com/aomushigou/archive/2009/07/24/179244.aspx
http://blogs.wankuma.com/aomushigou/archive/2009/07/25/179249.aspx
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -