Как получить значение текстового поля в обработчике событий RadGrid ItemCommand при использовании пользовательской команды?

Я использую шаблоны форм RadGrid, как показано ниже;

<EditFormSettings EditFormType="Template">
    <FormTemplate>
        <table id="tblEditForm" cellpadding="2" cellspacing="2" width="100%" border="2px"
            class="tblEditForm">                           
            <tr>
                <th>
                    Server Name:
                </th>
                <td>
                    <asp:TextBox ID="tbServerName" runat="server" Text='<%# Bind("ServerName") %>' CssClass="tbServerName">
                    </asp:TextBox>
                </td>
            </tr>                                        
            <tr>
                <td colspan="2">
                    <div style="text-align: left; padding-left: 10px;display: inline; width: 50%">

                        <asp:LinkButton ID="lbTestConnection" runat="server" Text="Test Connection" CommandName="TestConnection" />
                        (It may take up to 15 seconds.)
                        <br />                                                                         
                    </div>
                    <asp:Label ID="lblTestConnectionResult" runat="server" CssClass="testConnectionResult"></asp:Label>      
                    <div style="text-align: right; padding-right: 10px;display: inline; float: right;">
                        <asp:Button ID="btnUpdate" Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>'
                            runat="server" CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>'>
                        </asp:Button>&nbsp;
                        <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False"
                            CommandName="Cancel"></asp:Button>
                    </div>
                </td>
            </tr>
        </table>
    </FormTemplate>
</EditFormSettings>

При нажатии кнопки «Обновить» в моем RadGrid отображается форма редактирования. Затем я нажимаю кнопку ссылки Test Connection, и возникает событие ItemCommand.

public void OnRadGridItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == "TestConnection")
    {               
        var gridEditFormItem = e.Item as GridEditFormItem;
        if (gridEditFormItem == null)
            throw new ApplicationException("gridEditFormItem is null");
        var serverNameTextBox = gridEditFormItem.FindControl("tbServerName") as TextBox;
    }
}

Проблема в том, что на данном этапе переменная gridEditFormItem имеет значение null, поэтому я, например, не могу понять значение текстового поля имени сервера.

Как получить значение текстового поля в обработчике событий RadGrid ItemCommand?

Если вместо этого я нажму кнопку вставки ссылки по умолчанию в RadGrid, gridEditFormItem будет иметь значение, поэтому я могу просто найти там значение моего текстового поля.

Пожалуйста помоги.

Спасибо,


person The Light    schedule 26.10.2011    source источник


Ответы (3)


Я починил это :)

 var gridEditFormItem = e.Item as GridEditFormItem ?? ((GridDataItem)(e.Item)).EditFormItem;

                if (gridEditFormItem == null)
                    throw new ApplicationException("gridEditFormItem is null");

При вставке e.Item является GridEditFormItem. При обновлении e.Item является GridDataItem!

person The Light    schedule 26.10.2011

Один из способов сделать это — сохранить значения полей внутри ключей данных RadGrid. Когда OnRadGridItemCommand вызывается, попробуйте получить такое значение:

string tbServerNameValue = RadGridID.MasterTableView.DataKeyValues[e.Item.ItemIndex]["field_name"];

Не уверен, что это правильный синтаксис, я не могу проверить этот код прямо сейчас. Просто попробуйте.

person Razvan Trifan    schedule 26.10.2011
comment
как они могут храниться в DataKeys? это значения, которые должны быть получены из значений текстового поля на клиенте. - person The Light; 26.10.2011
comment
извините, я не прочитал ваш пост должным образом. Вы пытались получить элемент сетки и найти элементы управления с помощью FindControl? Я думаю, это выглядит примерно так: GridItem editedItem = RadGridID.MasterTableView.Items[e.Item.ItemIndex]; затем TextBox tbServerName = (TextBox)editedItem.FindControl(tbServerName ). - person Razvan Trifan; 26.10.2011
comment
это исправлено, не беспокойтесь. поделился ответом. - person The Light; 26.10.2011

Я проверил код удара для asp.net в itemcommand, и он правильный.

protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == "TestConnection")
            {               
                var FormItem = e.Item as GridDataItem;
                if (FormItem == null)
                    throw new Exception("GridDataItem is null");
                var serverNameTextBox = FormItem.EditFormItem.FindControl("tbServerName") as TextBox;
        }

}
person Phoenix    schedule 26.12.2012