0

ASCXファイル:

<asp:datagrid runat="server" id="gridFormFields" datakeyfield="FieldID"
autogeneratecolumns="False" 
onitemcommand="gridFormFields_ItemCommand" onitemdatabound="gridFormFields_ItemDataBound">
<columns>
    <asp:templatecolumn>
        <itemtemplate>
            <asp:imagebutton runat="server" id="buttonMoveUpFormField" resourcekey="buttonMoveUpFormField"
            commandname="Item" commandargument="MoveUp" imageurl="~/images/up.gif" />
        </itemtemplate>
    </asp:templatecolumn>
    <asp:templatecolumn>
        <itemtemplate>
            <asp:imagebutton runat="server" id="buttonMoveDownFormField" resourcekey="buttonMoveDownFormField" 
            commandname="Item" commandargument="MoveDown" imageurl="~/images/dn.gif" />
        </itemtemplate>
    </asp:templatecolumn>
</columns>

背後にあるコード:

protected void gridFormFields_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        (e.Item.FindControl("buttonMoveUpFormField") as ImageButton)
         .Visible = gridFormFields.Items.Count > 1 && e.Item.ItemIndex > 0;

        (e.Item.FindControl("buttonMoveDownFormField") as ImageButton)
         .Visible = gridFormFields.Items.Count > 1 && e.Item.ItemIndex < gridFormFields.Items.Count - 1;
    }
  • コードビハインドでは、FindControlによって返されるコントロールはnullです。なんで?

  • buttonMoveUpFormFieldおよびbuttonMoveDownFormFieldコントロールにアクセスするにはどうすればよいですか?

  • コードビハインドから、DataGridのTemplateColumnセクションのItemTemplateセクションで宣言されているコントロールにアクセスすることは可能ですか?

4

2 に答える 2

0

ItemTemplateセクション内にあるコントロールに確実にアクセスできます。私は同様の問題を扱っています。私が見つけた1つのことは、「gridFormFields_ItemDataBound」と呼ばれるものによっては、これらのコントロールにまだアクセスできない場合があるということです。

私のインスタンスでは、「ItemTemplate」と「EditItemTemplate」があることを知っています。編集をクリックすると、実際に「編集モード」に切り替わる前にイベント「RowEditing」が発生するため、コントロールはまだそこに。ただし、編集モードで[保存]をクリックすると起動される「RowUpdating」のコントロールにはアクセスできます。

多分これは役立ちますか?たとえば、「OnDataBound」はコントロールにアクセスしようとしているイベントである可能性がありますが、データバウンドではそれらにアクセスできない可能性がありますか?

ちょっとした考え。私がさらに進んだら、これを編集します。

于 2010-08-24T19:26:25.310 に答える
0

そのコントロールを見つける前に、「Item」と「AlternatingItem」を含め、他のすべてのタイプを除外するコードを追加する必要があるためです。

if(e.Item.Type==..。

于 2010-08-24T19:54:43.673 に答える