0

デフォルトですべての行が編集可能なグリッドビューがあります。ほとんどの列には、問題ではないフォーマットバリデーターを備えた単純なテキストボックスが必要です。

ただし、ユーザーが選択できる選択肢のリストを必要とする列が 1 つあります。これを行うには、Ajax ドロップ ダウン エクステンダーを使用してテキスト ボックスにバインドしているので、テキスト ボックスをクリックするとリストが表示されます...十分に単純です。

ユーザーがドロップダウンからオプションを選択した後に問題が発生します。テキストボックスの値を新しく選択したものに更新できないようです。

これは gridview 列の ItemTemplate です。

<%--  PRIORITY --%> 
                <asp:TemplateField HeaderText="PRI" SortExpression="PRIORITY">
                    <ItemTemplate>                                                                   
                        <ItemStyle CssClass="ssCellSelected" />
                        <asp:Panel ID="priorityitems" runat="server" BorderColor="Aqua" BackColor="White" BorderWidth="1">
                        <asp:ListBox ID="lstPRIORITY" runat="server" SelectedItem='<%# Bind("PRIORITY") %>'>
                            <asp:ListItem>P1</asp:ListItem>
                            <asp:ListItem>P2</asp:ListItem>
                            <asp:ListItem>P3</asp:ListItem>
                        </asp:ListBox>
                        </asp:Panel>
                        <asp:TextBox ID="PRIORITY" runat="server" Width="35px" Text='<%# Eval("PRIORITY") %>' CssClass="ssTextBox"></asp:TextBox>
                        <cc1:DropDownExtender ID="PRIORITY_DropDownExtender" runat="server" 
                            Enabled="True" DropDownControlID="priorityitems" TargetControlID="PRIORITY">
                        </cc1:DropDownExtender>
                    </ItemTemplate> 
                    <ItemStyle CssClass="ssCell" />                   
                </asp:TemplateField>

各行の onclick イベント作成のコード ビハインドを次に示します。

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

If e.Row.RowType = DataControlRowType.DataRow Then Dim lstPRI As ListBox = DirectCast(e.Row.Cells(3).FindControl("lstPRIORITY"), ListBox) Dim rowIndex As Integer = e.Row.RowIndex Dim columIndex As Integer = 3 '列インデックスは 0 If lstPRI IsNot Nothing Then lstPRI.Attributes.Add("onclick", "setText(this.options[this.selectedIndex].value," & rowIndex.ToString & "," & columIndex.ToString & ");") 終了する場合 終了する場合

End Sub

[this.selectedIndex].Value を取得し、それを ID が PRIORITY の TextBox に適用する必要があります。

どういうわけかこれを動的な対応物に変える必要があります

<script type="text/javascript" language="javascript">
    function setText(newValue, row, column) {
        document.getElementById("ctl00_pagebody_GridView1_ctl02_PRIORITY").value = newValue;
    }
</script>
4

1 に答える 1

0

DomとJavascriptを使用してこれを機能させることができました。

ここで良いチュートリアルが見つかりました... http://www.opensourcetutorials.com/tutorials/Client-Side-Coding/JavaScript/javascript-document-object-model/page1.html

とにかく、IE DEV TOOLSをインストールして、グリッドビューのHTMLを表示し、テキストボックスの位置を把握しました...

次に、aspx ページのスクリプト関数で..

テーブル内にテーブル構造全体を含むタグがあったため、グリッドビューの最初の子ノードを選択する必要があったことに注意してください。

最初の行はgridviewテーブルのヘッダーであるため、行整数にも1を追加する必要がありました

<script type="text/javascript" language="javascript">
    function setText(newValue, therow, column) {
        var gridView = document.getElementById('<%= GridView1.ClientID %>').childNodes[0];
        var row = gridView.childNodes[parseInt(therow) + 1];
        var cell = row.cells[column];
        cell.childNodes[1].childNodes[0].value = newValue;
    }       
</script> 
于 2010-01-11T21:52:17.280 に答える