У меня есть сетка Telerik. Для каждой строки есть таблица данных. Строка имеет тип NominationTypeClass
, а строки в таблице сведений имеют тип Nomination
. Так что это означает для каждого типа номинации есть список номинаций. Код сетки:
<telerik:RadGrid
AllowPaging="true"
AllowSorting="true"
AutoGenerateColumns="false"
GridLines="None"
ID="rgMyNominations"
OnDetailTableDataBind="rgMyNominations_DetailTableDataBind"
OnItemDataBound="rgMyNominations_ItemDataBound"
OnNeedDataSource="rgMyNominations_NeedDataSource"
OnUpdateCommand="rgMyNominations_UpdateCommand"
PageSize="5"
runat="server"
ShowHeader="false"
ShowStatusBar="true">
<MasterTableView DataKeyNames="NominationTypeID" HierarchyDefaultExpanded="true" Width="100%">
<Columns>
<telerik:GridTemplateColumn>
<ItemTemplate>
<b><asp:Label ID="lblNominationType" runat="server" Text='<%# DataBinder.Eval( Container, "DataItem.NominationType") %>' /></b>
</ItemTemplate>
<ItemStyle Width="100%" />
</telerik:GridTemplateColumn>
</Columns>
<NoRecordsTemplate>No Nomination Types.</NoRecordsTemplate>
<DetailTables>
<telerik:GridTableView PageSize="5" Name="Nominations" GridLines="None" Width="100%" ShowHeader="true" DataKeyNames="NominationID">
<Columns>
<telerik:GridTemplateColumn HeaderText="Person / Team">
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# GetName(DataBinder.Eval(Container, "DataItem")) %>' />
</ItemTemplate>
<ItemStyle VerticalAlign="Top" Width="20%" />
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Date Nominated">
<ItemTemplate>
<asp:Label ID="lblNominationDate" runat="server" Text='<%# FormatDate(DataBinder.Eval(Container, "DataItem.NominationDate")) %>' />
</ItemTemplate>
<ItemStyle VerticalAlign="Top" Width="14%" />
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Action" UniqueName="Action_Column">
<ItemTemplate>
<b><asp:HyperLink ID="hlEdit" runat="server" Text="Edit" /></b><br />
<b>
<asp:LinkButton
CausesValidation="false"
CommandName="Update"
ID="lbWithdrawnStatus"
runat="server"
Text="Withdraw"
OnClientClick="javascript:return ConfirmWithdrawnStatusChange();" />
</b>
</ItemTemplate>
<ItemStyle VerticalAlign="Top" Width="7%" />
</telerik:GridTemplateColumn>
</Columns>
<NoRecordsTemplate>No Nominations.</NoRecordsTemplate>
</telerik:GridTableView>
</DetailTables>
</MasterTableView>
<ClientSettings AllowExpandCollapse="true"></ClientSettings>
</telerik:RadGrid>
Вот как я заполняю свои строки:
protected void rgMyNominations_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
try
{
if (!e.IsFromDetailTable)
{
rgMyNominations.DataSource = GetNominationTypes();
}
}
catch (Exception ex)
{
// Handle exceptions
}
}
Вот как я заполняю свою таблицу данных:
protected void rgMyNominations_DetailTableDataBind(object source, GridDetailTableDataBindEventArgs e)
{
try
{
GridDataItem gridDataItem = (GridDataItem)e.DetailTableView.ParentItem;
if (e.DetailTableView.Name == "Nominations")
{
int nominationTypeID = int.Parse(gridDataItem.GetDataKeyValue("NominationTypeID").ToString());
List<Nomination> nominations = new List<Nomination>();
// For each nomination type, add the nomination
foreach (Nomination n in myNominationsList)
{
if (n.NominationType.NominationTypeID == nominationTypeID)
{
nominations.Add(n);
}
}
e.DetailTableView.DataSource = nominations;
}
}
catch (Exception ex)
{
// Handle exceptions
}
}
У меня есть столбец действий, в котором есть ссылка «Снято». При нажатии у меня появляется JavaScript confirm box
с опцией Да или Нет. Если да, то nomination status is updated to withdrawn
. Затем я хочу обновить сетку, чтобы показать обновленный статус. Я использовал команду обновления сетки для отображения окна команд JavaScript. Это обновляет, но это правильный способ сделать это?
protected void rgMyNominations_UpdateCommand(object source, GridCommandEventArgs e)
{
try
{
StatusManager.InsertStatus( /* required parameters */ );
// Refresh grid
rgMyNominations.DataSource = GetNominationTypes();
rgMyNominations.DataBind();
}
catch (Exception ex)
{
// Handle exceptions
}
}
Привязка сетки не хочет работать должным образом после обновления статуса. Строка сетки имеет тип NominationTypeClass
, а таблица сведений имеет тип Nomination
. Я отладил, и там, где он установил источник данных для каждого, это правильно, но когда представление отображается для:
<asp:Label ID="lblNominationDate" runat="server" Text='<%# FormatDate(DataBinder.Eval(Container, "DataItem.NominationDate")) %>' />
... говорится, что NominationDate не является свойством NominationTypeClass
. Это неправильно, я не знаю, почему в качестве типа таблицы данных выбран тип строки? НоминацияДата является собственностью Номинации. Кажется, что он переопределяет источники данных.
Есть ли в сети образцы того, чего я пытаюсь достичь? Любой совет будет оценен.