- - PR -
GridView複数設置
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-03-30 23:29
ControlParameterは、PropertyNameに基づいて、ControlIDで指定されたコントロールの
どのプロパティの値を、データソースのパラメータに渡すかを決定します。 PropertyNameが省略された場合はそのコントロール(今回の場合のGridView)の既定のプロパティ、 正確にはControlValuePropertyAttributeで指定されたプロパティの値が使われます。 GridViewの場合、それはSelectedValueです。 このことは下記[解説]に書いてあります(コントロールと既定プロパティの対応表も[解説]の下にあります) http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.controlparameter.propertyname(VS.80).aspx SelectedValueは、選択されている行の、キーフィールド(DataKeyNamesで指定されたフィールド)の 値を返します。複数のキーが指定されている場合、先頭のキーフィールド値のみを返します。 先頭以外のキーフィールドの値をとりたい場合、SelectedDataKeyを使用します。 上記のことは下記の[解説]に書いてあります。 http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.selectedvalue(VS.80).aspx 私もさっき試して初めて知りましたが、 PropertyName="SelectedDataKey.Values[1]" とか PropertyName='SelectedDataKey.Values["管理番号"]' のように指定できるみたいです。 | ||||||||
|
投稿日時: 2009-04-04 20:48
試して実装できました? 色々SelectedDataKeyで検索してサンプル探して試したのですが・・ うまく表示してくれません。 view1のGridView1 DataKeyNamesを消してしまえばエラーがでます view2のGridView2のSelectedDataKeyを正しく入力するとエラーは回避できるのですか? だんだん分からなくなってきました 具体的にどの部分に記述すればよいのかが分かりません 現在はview2でGridView2内のSelectParametersで下記を入れています <asp:ControlParameter ControlID="GridView2" PropertyName='SelectedDataKey.Values["管理番号"]' Type="String" /> 同様にFoamViewも変更させなければならないような・・・ できればまわりのソース表示お願いします。 初心者ですみませんm(__)m [ メッセージ編集済み 編集者: BBSR 編集日時 2009-04-04 21:36 ] | ||||||||
|
投稿日時: 2009-04-05 02:25
GridView1のDataKeyNamesは消しませんよ。FoamViewも変更する必要あるでしょうね。
下記のような感じでできています。 テーブルは違うしAccessじゃありませんが、プロパティ設定のしかたはわかると思います。
[追記]あ、これじゃGridView1の選択列が出ませんね。そこは追加してください。 [ メッセージ編集済み 編集者: べる 編集日時 2009-04-05 02:37 ] | ||||||||
|
投稿日時: 2009-04-06 19:11
貴重なコードありがとうございます SelectParameters内に下記を追加しました Foam内 <asp:ControlParameter ControlID="GridView1" Name="ID" PropertyName='SelectedDataKey.Values["ID"]' ConvertEmptyStringToNull="False" Type="Int32" /> GridView2内 <asp:ControlParameter ControlID="GridView1" Name="管理番号" PropertyName='SelectedDataKey.Values["管理番号"]' ConvertEmptyStringToNull="False" Type="String" /> 実行すると下記のエラーが出ました。 DataBinding: 'System.Data.DataRowView' には ID という名前のプロパティは含まれません。 おそらくFoam内のSelectParametersで指定したIDはGridView1には無いですよって 言ってる素人判断。 原因はGridView1にあるとしたら。。。 GridViewには少し改良してありテキストボックスで検索するようにしています。 それが下記になります(表示用に書き加え等ありますがきちんと動いてくれます) <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" PageSize="50" Width="967px" AllowSorting="True" CellPadding="1" ForeColor="Black" BackColor="#CCCCCC" BorderColor="#999999" BorderStyle="Solid" DataKeyNames="ID,管理番号"> <Columns> <asp:CommandField ButtonType="Button" ShowSelectButton="True" /> <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" /> <asp:BoundField DataField="管理番号" HeaderText="管理番号" SortExpression="管理番号" /> ----省略----- <Columns> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="---省略---" ProviderName="System.Data.OleDb" SelectCommand="SELECT ID,共通管理番号 FROM データーベース WHERE ((番号 LIKE '%' + @param1 + '%') OR (番号 IS NULL AND @param1 = ''))----省略-----"> <SelectParameters> <asp:ControlParameter ControlID="TextBox1" ConvertEmptyStringToNull="False" Name="?"PropertyName="Text" /> <asp:ControlParameter ControlID="TextBox2" ConvertEmptyStringToNull="False" Name="?"PropertyName="Text" /> <asp:ControlParameter ControlID="TextBox3" ConvertEmptyStringToNull="False" Name="?"PropertyName="Text" /> --省略----- </SelectParameters> 基本的にGridView1のDataKeyNames="ID,管理番号を読みにいってるイメージでよいのですよね? 間違いは無いはずなんですが。。 [ メッセージ編集済み 編集者: BBSR 編集日時 2009-04-06 19:18 ] | ||||||||
|
投稿日時: 2009-04-06 22:38
FormViewにDataKeyNames="ID" があったり テンプレートで <%# Eval("ID") %> とかなってると 当然エラーになります。GridView2側も同様です。 | ||||||||
|
投稿日時: 2009-04-07 14:59
ありがとうございます ご指摘道理DataKeyNames="ID"でした。 べる様のご指導等ありがとうございます 理想通りのページが出来上がりました。 しばらく完成のよいんにひたります 本当にありがとうございました。m(__)m |