- PR -

GriddViewでのダイレクトキャストについて

投稿者投稿内容
みゆき
会議室デビュー日: 2006/09/09
投稿数: 9
投稿日時: 2006-09-09 02:29
はじめまして。

みゆきです。
よろしくお願いします

CommandFieldからtemplateFieldに変換したボタンが存在します。
ボタンをクリックした時に(ItemTemplate)もうひとつのtemplat
eFieldにあるDropDownList(EditItemTemplate)を選択させない様
にしたいのですが可能でしょうか?


わたしが考えた内容としては、
ボタンをクリックした時のイベントハンドラでDirectCastを使用
しDropDownListコントロールを参照させ、DropDownListのSelect
edプロパティでFalseにするというようは方法で行ってみたのです
がうまくいきません。

この様なやり方ではこのような事は行えないでしょうか?
下に多くなり申し訳ないのですがコードを書きますのでどうか
アドバイスの程をよろしくおねがいします。

★test.aspx.vb(抜粋)
///////////////////////////////////////////////////////////////////////////
Protected Sub test_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim UpdateBot As Button = DirectCast(sender, Button)
Dim RowUpdateBot As GridViewRow = DirectCast(UpdateBot.NamingContainer, GridViewRow)
Dim StateDrop As DropDownList = DirectCast(UpdateBot.FindControl("STATE_DROP"), DropDownList)

StateDrop.Items(3).Selected = False

End Sub
///////////////////////////////////////////////////////////////////////////

★test.aspx(抜粋)
///////////////////////////////////////////////////////////////////////////
●ボタンの部分
<asp:TemplateField HeaderText="編集" InsertVisible="False">
<EditItemTemplate>
<asp:Button ID="test_Update" runat="server" CausesValidation="True"
   CommandName="Update"OnClick="test_Update_Click" Text="更新" />&nbsp;
   <asp:Button ID="test_Stop" runat="server"
CausesValidation="False" CommandName="Cancel" Text="中止" />
</EditItemTemplate>

   <ItemTemplate>
<asp:Button ID="test_edit" runat="server"
    CausesValidation="False" CommandName="Edit" Text="編集" OnClick="test_Click" />
</ItemTemplate>
</asp:TemplateField>

●DropDownListの部分
<asp:TemplateField HeaderText="テスト">
<ItemTemplate>
&nbsp;-
</ItemTemplate>

<EditItemTemplate>
<asp:DropDownList ID="STATE_DROP" runat="server" AutoPostBack="True">
<asp:ListItem></asp:ListItem>
<asp:ListItem>テスト</asp:ListItem>
<asp:ListItem>テスト1</asp:ListItem>
<asp:ListItem>テスト2</asp:ListItem>
<asp:ListItem>テスト3</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
////////////////////////////////////////////////////////////////////////////

[ メッセージ編集済み 編集者: みゆき 編集日時 2006-09-11 23:03 ]
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-09-09 08:14
引用:

CommandFieldからtemplateFieldに変換したボタンが存在します。
ボタンをクリックした時に(ItemTemplate)もうひとつのtemplat
eFieldにあるDropDownList(EditItemTemplate)を選択させない様
にしたいのですが可能でしょうか?


DropDownListからアイテムを選択できないようにしたいのですよね。

DropDownListのEnabledプロパティを「False」に設定したらどうでしょうか。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
みゆき
会議室デビュー日: 2006/09/09
投稿数: 9
投稿日時: 2006-09-09 16:32
こんにちわ。

みゆきです。


引用:
--------------------------------------------------------------------------------
DropDownListのEnabledプロパティを「False」に設定したらどうでしょうか。
--------------------------------------------------------------------------------

さっっそく
★test.aspx.vbの
StateDrop.Items(3).Selected = Falseから
StateDrop.Enabled = False
にしてみました。
しかし、うまくいかず
「System.NullReferenceException: オブジェクト
参照がオブジェクト インスタンスに設定されていません。」
の様なエラーがでてしまいます。
やはり行う事はできないのでしょうか?

NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-09-10 01:40
NAL-6295です。

そもそも

引用:

Dim StateDrop As DropDownList = DirectCast(UpdateBot.FindControl("STATE_DROP"), DropDownList)



で期待しているDropDownListを取得できていません。
UpdateBotというのが、ボタンコントロールなので、その中にDropDownListがあるわけありませんよね。

引用:

Dim StateDrop As DropDownList = DirectCast(Me.FindControl("STATE_DROP"), DropDownList)




としてみてはいかがでしょうか?

引用:

「System.NullReferenceException: オブジェクト
参照がオブジェクト インスタンスに設定されていません。」



という例外は、それが発生した箇所で参照しようとしている変数にインスタンスが設定されていない時に発生します。
だから、ステップ実行をして発生箇所で止めて、何が設定されていないのかを調べてみるのが早道だったりします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-09-10 07:57
編集モードのときDropDownListからアイテムを選択できないようにするには、
Enabledプロパティに「False」を設定するだけでよいのでは。

コード:
        <asp:TemplateField HeaderText="CategoryID" SortExpression="CategoryID">
          <EditItemTemplate>
            <asp:DropDownList ID="DropDownList1" runat="server" 
              DataSourceID="SqlDataSource2" 
              DataTextField="CategoryName" DataValueField="CategoryID"
              SelectedValue='<%# Bind("CategoryID") %>'
              Enabled="false">
            </asp:DropDownList>          
          </EditItemTemplate>
          <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# Bind("CategoryID") %>'></asp:Label>
          </ItemTemplate>
        </asp:TemplateField>


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
みゆき
会議室デビュー日: 2006/09/09
投稿数: 9
投稿日時: 2006-09-10 16:36
こんにちは。

NAL-6295様、Access様ご返答本当にありがとうございます。

引用:
--------------------------------------------------------------------------------


Dim StateDrop As DropDownList = DirectCast(Me.FindControl("STATE_DROP"), DropDownList)


--------------------------------------------------------------------------------

アドバイスを頂いた通り上記の様に行ってみたのですが同じエラーを出力して
しまいました。


引用:
--------------------------------------------------------------------------------
編集モードのときDropDownListからアイテムを選択できないようにするには、
Enabledプロパティに「False」を設定するだけでよいのでは。
--------------------------------------------------------------------------------

できたら、すべてを選択不能にするのではく、ボタンをクリックした時にDropDownListコントロールの3番目の項目を選択できない様にしたいと思っています。
説明に不足がありました所深くお詫びたします。



やはりこのような事を行うことはできないのでしょうか?


Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-09-11 05:56
引用:

できたら、すべてを選択不能にするのではく、ボタンをクリックした時にDropDownListコントロールの3番目の項目を選択できない様にしたいと思っています。


3番目のアイテムをDropDownListから削除した状態で表示したらどうでしょうか。

選択不可のアイテムをDropDownListに表示するのが問題のような気がします。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
みゆき
会議室デビュー日: 2006/09/09
投稿数: 9
投稿日時: 2006-09-11 22:59
こんばんは。

みゆきです。

Access様ご返答、毎回本当にありがとうございます。

引用:
--------------------------------------------------------------------------------
3番目のアイテムをDropDownListから削除した状態で表示したらどうでしょうか。

選択不可のアイテムをDropDownListに表示するのが問題のような気がします。
--------------------------------------------------------------------------------

削除してみましたが同じ様に

「System.NullReferenceException: オブジェクト
参照がオブジェクト インスタンスに設定されていません。」
が出力されてしまいました。

そこで、今あるボタンを、TemplateFieldから、EditItemTemplateに変更し
行ってみた所、DropDownListを参照する事ができました。
DropDownListはEditItemTemplate上に存在します。


ただ、わたしとしてはEditItemTemplateではなくてTemplateField上にある
ボタンをクリックした時にEditItemTemplate上にあるDropDownListを参照し
たいのです。

TemplateField上からEditItemTemplateにあるコントロールの参照はできないの
でしょうか?

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