This code is loosely based on several of the demos. The main issue I'm having right now is that when I save data through my external form and call e.Item.OwnerTableView.Rebind() the RadGrid does not get updated. The only way to get the RadGrid to update is by paging or clicking the "Refresh" button.
I'm calling e.Item.OwnerTableView.Rebind() and e.Item.Selected = true within the RadGrid_ItemCommand method.
I have paste all code below incase I'm doing something stupid that's screwing everything up. I'm guessing it's a timing issue.
Thanks for any help.
ASPX
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="XmlHttpPanel3.aspx.cs" Inherits="XmlHttpPanel3" %> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head runat="server"> |
<title></title> |
<telerik:radcodeblock id="RadCodeBlock" runat="server"> |
<script type="text/javascript"> |
//<![CDATA[ |
function radGrid_RowSelected(sender, args) { |
var key = args.getDataKeyValue("ContentId"); |
var panel = $find("<%=RadXmlHttpPanel.ClientID %>"); |
panel.set_value(key); |
} |
//]]> |
</script> |
</telerik:radcodeblock> |
</head> |
<body> |
<form id="form1" runat="server"> |
<div> |
<asp:scriptmanager id="ScriptManager" runat="server" /> |
<telerik:radcombobox id="RadComboBox" runat="server" skin="Telerik" datasourceid="ContentGroupDataSource" datatextfield="ContentGroupName" datavaluefield="ContentGroupId" autopostback="true" appenddatabounditems="true" onselectedindexchanged="RadComboBox_SelectedIndexChanged"> |
<items> |
<telerik:radcomboboxitem text="All" value="0" selected="true" /> |
</items> |
</telerik:radcombobox> |
<br /> |
<style type="text/css"> |
.RadGrid_Telerik .rgFilterRow td { |
padding-top: 8px; |
} |
</style> |
<telerik:radgrid id="RadGrid" runat="server" skin="Telerik" width="250" allowpaging="true" allowfilteringbycolumn="true" autogeneratecolumns="false" oninit="RadGrid_Init" onneeddatasource="RadGrid_NeedDataSource" onitemcommand="RadGrid_ItemCommand"> |
<mastertableview commanditemdisplay="Top" editmode="EditForms" datakeynames="ContentId" clientdatakeynames="ContentId"> |
<columns> |
<telerik:gridboundcolumn uniquename="ContentName" datafield="ContentName" headertext="Name" filtercontrolwidth="200px" currentfilterfunction="Contains" autopostbackonfilter="true"></telerik:gridboundcolumn> |
</columns> |
<commanditemsettings addnewrecordtext="Add new content" /> |
<editformsettings editformtype="Template"> |
<formtemplate> |
<div style="background:#9DDF6C;padding-top:5px;"> |
<table width="100%"> |
<tr> |
<td> |
Name: |
</td> |
<td style="padding-left:2px;"> |
<asp:textbox id="ContentName" runat="server" width="187px"></asp:textbox> |
</td> |
</tr> |
<tr> |
<td colspan="2" align="right" style="padding-right:10px;"> |
<asp:linkbutton id="Insert" runat="server" commandname="PerformInsert" text="Insert"></asp:linkbutton> |
|
<asp:linkbutton id="Cancel" runat="server" commandname="Cancel" text="Cancel" causesvalidation="false" onclientclick="<%Eval(this.ClientFireCommandFunction(Telerik.Web.UI.RadGrid.CancelCommandName, String.Empty)) %>"></asp:linkbutton> |
</td> |
</tr> |
</table> |
</div> |
</formtemplate> |
</editformsettings> |
</mastertableview> |
<clientsettings enablerowhoverstyle="true"> |
<selecting allowrowselect="true" /> |
<clientevents onrowselected="radGrid_RowSelected" /> |
</clientsettings> |
<groupingsettings casesensitive="false" /> |
<pagerstyle mode="NumericPages" showpagertext="false" pagebuttoncount="5" /> |
</telerik:radgrid> |
<telerik:radxmlhttppanel id="RadXmlHttpPanel" runat="server" skin="Telerik" onservicerequest="RadXmlHttpPanel_ServiceRequest" loadingpanelid="RadAjaxLoadingPanel" enableclientscriptevaluation="true"> |
<asp:multiview id="MultiView" runat="server"> |
<asp:view id="SelectView" runat="server"> |
Select Content |
</asp:view> |
<asp:view id="EditView" runat="server"> |
<asp:label id="ContentId" runat="server"></asp:label> |
<br /> |
<asp:textbox id="ContentName" runat="server"></asp:textbox> |
<br /> |
<telerik:radcombobox id="ContentGroup" runat="server" skin="Telerik" datatextfield="ContentGroupName" datavaluefield="ContentGroupId"></telerik:radcombobox> |
<br /> |
<asp:linkbutton id="SaveContent" runat="server" text="Save" onclick="SaveContent_Click"></asp:linkbutton> |
</asp:view> |
</asp:multiview> |
</telerik:radxmlhttppanel> |
<telerik:radajaxmanager id="RadAjaxManager" runat="server"> |
<ajaxsettings> |
<telerik:ajaxsetting ajaxcontrolid="RadComboBox"> |
<updatedcontrols> |
<telerik:ajaxupdatedcontrol controlid="RadComboBox" /> |
<telerik:ajaxupdatedcontrol controlid="RadGrid" loadingpanelid="RadAjaxLoadingPanel" /> |
<telerik:ajaxupdatedcontrol controlid="RadXmlHttpPanel" /> |
</updatedcontrols> |
</telerik:ajaxsetting> |
<telerik:ajaxsetting ajaxcontrolid="RadGrid"> |
<updatedcontrols> |
<telerik:ajaxupdatedcontrol controlid="RadComboBox" /> |
<telerik:ajaxupdatedcontrol controlid="RadGrid" loadingpanelid="RadAjaxLoadingPanel" /> |
<telerik:ajaxupdatedcontrol controlid="RadXmlHttpPanel" /> |
</updatedcontrols> |
</telerik:ajaxsetting> |
</ajaxsettings> |
</telerik:radajaxmanager> |
<telerik:radajaxloadingpanel id="RadAjaxLoadingPanel" runat="server"></telerik:radajaxloadingpanel> |
<asp:objectdatasource id="ContentGroupDataSource" runat="server" typename="Abc.WD.InternationalStore.DataAccess.DataTableAdapters.ContentGroupInfoTableAdapter" selectmethod="GetDataByStoreId"> |
<selectparameters> |
<asp:parameter type="String" name="StoreId" defaultvalue="49D4B1F4-236B-DE11-870E-001A6465230E" /> |
<asp:parameter type="Int32" name="CultureId" defaultvalue="1033" /> |
</selectparameters> |
</asp:objectdatasource> |
</div> |
</form> |
</body> |
</html> |
CS
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Web; |
using System.Web.UI; |
using System.Web.UI.WebControls; |
using Abc.WD.InternationalStore.DataAccess.DataTableAdapters; |
using Abc.WD.InternationalStore.DataAccess; |
using Telerik.Web.UI; |
public partial class XmlHttpPanel3 : System.Web.UI.Page |
{ |
protected void Page_Load(Object sender, EventArgs e) |
{ |
} |
protected void SaveContent_Click(Object sender, EventArgs e) |
{ |
(RadGrid.Items[0] as GridDataItem).FireCommandEvent(RadGrid.UpdateCommandName, String.Empty); |
} |
protected void RadGrid_Init(Object sender, EventArgs e) |
{ |
GridFilterMenu menu = RadGrid.FilterMenu; |
Int32 i = 0; |
while (i < menu.Items.Count) |
{ |
if (menu.Items[i].Text == "NoFilter" || menu.Items[i].Text == "Contains") |
{ |
i++; |
} |
else |
{ |
menu.Items.RemoveAt(i); |
} |
} |
} |
protected void RadGrid_ItemCreated(Object sender, GridItemEventArgs e) |
{ |
if(e.Item is GridEditableItem && e.Item.IsInEditMode) |
{ |
GridEditableItem item = e.Item as GridEditableItem; |
LinkButton insert = item.FindControl("Insert") as LinkButton; |
insert.OnClientClick = String.Format("if(!$find('{0}').fireCommand('PerformInsert', '')) return false;", e.Item.OwnerID); |
LinkButton cancel = item.FindControl("Cancel") as LinkButton; |
cancel.OnClientClick = String.Format("if(!$find('{0}').fireCommand('CancelInsert','')) return false;", e.Item.OwnerID); |
} |
} |
protected void RadGrid_ItemCommand(Object source, Telerik.Web.UI.GridCommandEventArgs e) |
{ |
switch (e.CommandName) |
{ |
case RadGrid.PageCommandName: |
{ |
MultiView.ActiveViewIndex = 0; |
} |
break; |
case RadGrid.InitInsertCommandName: |
{ |
RadComboBox.Text = "All"; |
RadComboBox.Items[0].Selected = true; |
RadComboBox.Enabled = false; |
RadGrid.MasterTableView.FilterExpression = String.Empty; |
foreach (GridColumn column in RadGrid.Columns) |
{ |
column.CurrentFilterFunction = GridKnownFunction.Contains; |
column.CurrentFilterValue = String.Empty; |
} |
RadXmlHttpPanel.Value = String.Empty; |
} |
break; |
case RadGrid.PerformInsertCommandName: |
{ |
GridEditFormInsertItem item = e.Item as GridEditFormInsertItem; |
String contentName = ((TextBox)item.FindControl("ContentName")).Text; |
//String contentGroupId = ((RadComboBox)item.FindControl("ContentGroup")).SelectedValue; |
String contentGroupId = RadComboBox.FindItemByText("General").Value; |
ContentInfoTableAdapter adpater = new ContentInfoTableAdapter(); |
adpater.GetDataByInsert("49D4B1F4-236B-DE11-870E-001A6465230E", contentGroupId, contentName, String.Empty, 1033); |
RadComboBox.Enabled = true; |
RadGrid.AllowFilteringByColumn = true; |
if (RadGrid.Items.Count == RadGrid.PageSize) |
{ |
RadGrid.CurrentPageIndex++; |
} |
} |
break; |
case RadGrid.CancelCommandName: |
{ |
RadComboBox.Enabled = true; |
RadGrid.CurrentPageIndex = 0; |
RadGrid.AllowFilteringByColumn = true; |
} |
break; |
case RadGrid.UpdateCommandName: |
{ |
String contentId = (RadGrid.SelectedItems[0] as GridDataItem).GetDataKeyValue("ContentId").ToString(); |
ContentInfoTableAdapter adapter = new ContentInfoTableAdapter(); |
Data.ContentInfoDataTable table = adapter.GetDataByUpdate(contentId, ContentName.Text, String.Empty, 1033, ContentGroup.SelectedValue); |
Data.ContentInfoRow content = table[0]; |
SetEditView(content); |
MultiView.ActiveViewIndex = 1; |
e.Item.OwnerTableView.Rebind(); |
e.Item.Selected = true; |
} |
break; |
} |
} |
protected void RadComboBox_SelectedIndexChanged(Object sender, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e) |
{ |
MultiView.ActiveViewIndex = 0; |
RadGrid.CurrentPageIndex = 0; |
RadGrid.Rebind(); |
} |
protected void RadGrid_NeedDataSource(Object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) |
{ |
ContentInfoTableAdapter adapter = new ContentInfoTableAdapter(); |
if (RadComboBox.SelectedIndex == 0) |
{ |
RadGrid.DataSource = adapter.GetDataByStoreId("49D4B1F4-236B-DE11-870E-001A6465230E", 1033); |
} |
else |
{ |
RadGrid.DataSource = adapter.GetDataByContentGroupId(RadComboBox.SelectedValue, 1033); |
} |
} |
protected void RadXmlHttpPanel_ServiceRequest(Object sender, RadXmlHttpPanelEventArgs e) |
{ |
ContentInfoTableAdapter adapter = new ContentInfoTableAdapter(); |
Data.ContentInfoDataTable table = adapter.GetDataByContentId(e.Value, 1033); |
Data.ContentInfoRow content = table[0]; |
SetEditView(content); |
MultiView.ActiveViewIndex = 1; |
} |
void SetEditView(Data.ContentInfoRow content) |
{ |
ContentId.Text = content.ContentId.ToString(); |
ContentName.Text = content.ContentName; |
ContentGroup.DataSource = ContentGroupDataSource; |
ContentGroup.DataBind(); |
RadComboBoxItem selectedContentGroup = ContentGroup.FindItemByValue(content.ContentGroupId.ToString()); |
selectedContentGroup.Selected = true; |
ContentGroup.Text = selectedContentGroup.Text; |
} |
} |