Как получить значение текстового поля в обработчике события 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>
<asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False"
CommandName="Cancel"></asp:Button>
</div>
</td>
</tr>
</table>
</FormTemplate>
</EditFormSettings>
При нажатии на ссылку "Обновить" в моей RadGrid отображается форма редактирования. Затем я нажимаю кнопку ссылки "Проверить соединение", и возникает событие 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 имеет значение, поэтому я могу просто найти там значение моего текстового поля.
Пожалуйста помоги.
Спасибо,
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!
Я проверил код удара для 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;
}
}
Один из способов сделать это - сохранить значения полей внутри ключей данных RadGrid. Когда OnRadGridItemCommand повышен, попробуйте получить значение, как это:
string tbServerNameValue = RadGridID.MasterTableView.DataKeyValues[e.Item.ItemIndex]["field_name"];
Не уверен, что это правильный синтаксис, сейчас я не могу проверить этот код. Просто попробуй.