Проблемы с AJAX Drop Down Extender при обновлении текстового поля с выбранным значением индекса - PullRequest
0 голосов
/ 11 января 2010

У меня есть вид сетки, где все строки доступны для редактирования по умолчанию. Для большинства столбцов требуется простое текстовое поле с некоторыми форматирующими валидаторами, которые не являются проблемой.

Однако у меня есть 1 столбец, для которого требуется список вариантов, из которых пользователь может выбирать. Для этого я использую Ajax Drop Down Extender для привязки к текстовому полю, поэтому при щелчке по текстовому полю он дает им список ... Достаточно просто.

Проблема возникает после того, как пользователь выбирает опцию из выпадающего списка, я не могу получить текстовое поле для обновления его значения с новым выбранным.

Это шаблон элемента из столбца таблицы вида.

<%--  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)

Если 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 Если lstPRI ничего не значит lstPRI.Attributes.Add ("onclick", "setText (this.options [this.selectedIndex] .value," & rowIndex.ToString & "," & columIndex.ToString & ");") End If Конец, если

End Sub

Мне нужно взять [this.selectedIndex]. Значение и применить его к TextBox с идентификатором PRIORITY

Мне нужно как-то превратить это в динамический аналог

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

1 Ответ

0 голосов
/ 12 января 2010

Я смог заставить это работать, используя Dom и Javascript.

Хороший учебник был найден здесь ... http://www.opensourcetutorials.com/tutorials/Client-Side-Coding/JavaScript/javascript-document-object-model/page1.html

Во всяком случае, я установил IE DEV TOOLS, чтобы я мог просматривать HTML-код сетки и выяснить положение текстового поля ...

Затем в функции скрипта на странице aspx ..

Обратите внимание, что мне пришлось выбрать первый дочерний узел вида сетки, потому что внутри таблицы был тег, который затем содержал всю структуру таблицы.

Мне также пришлось добавить 1 к целому числу строк, поскольку первая строка является заголовком таблицы gridview

<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> 
...