#c# #asp.net #html #radgrid #dataitem
#c# #asp.net #HTML #radgrid #dataitem
Вопрос:
Я использую шаблоны форм 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>amp;nbsp;
<asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False"
CommandName="Cancel"></asp:Button>
</div>
</td>
</tr>
</table>
</FormTemplate>
</EditFormSettings>
При нажатии кнопки Обновить ссылку в моем RadGrid отображается форма редактирования.
Затем я нажимаю кнопку Test Connection link, и возникает событие 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 будет иметь значение, поэтому я могу просто найти там значение моего текстового поля.
Пожалуйста, помогите.
Спасибо,
Ответ №1:
Я это исправил 🙂
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!
Ответ №2:
Один из способов, которым вы могли бы это сделать, — сохранить значения полей внутри ключей данных RadGrid. Когда вызывается OnRadGridItemCommand, попробуйте получить значение следующим образом:
string tbServerNameValue = RadGridID.MasterTableView.DataKeyValues[e.Item.ItemIndex]["field_name"];
Не уверен, что это правильный синтаксис, я не могу протестировать этот код прямо сейчас. Просто попробуйте.
Комментарии:
1. как они могут храниться в DataKeys? это значения, которые должны быть извлечены из значений текстового поля на клиенте.
2. извините, я неправильно прочитал ваш пост. вы пытались получить элемент сетки и найти элементы управления с помощью FindControl? я думаю, это выглядит примерно так: GridItem editedItem = RadGridID.MasterTableView . Items[e.Item. ItemIndex]; затем текстовое поле tbServerName = (Текстовое поле)editedItem. FindControl(«tbServerName «).
3. это исправлено, не беспокойтесь. поделился ответом.
Ответ №3:
я тестировал код blow для 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;
}
}