<
telerik:GridClientSelectColumn UniqueName="ClientSelectColumn" HeaderText="Select"></telerik:GridClientSelectColumn>
and clicking on a toolbar "Properties" button.
if (this.grid.SelectedIndexes.Count == 1)
{
string index = this.grid.SelectedIndexes[0];
this.grid.MasterTableView.Items[index].Edit = true;
this.grid.Rebind();
this.grid.MasterTableView.Items[index].Selected = true;
}
Basically the grid is bound to a readonly business object, the intention is to retrieve the ID value of the user selected row in the ItemCommand event and load a Read/Write business object which will be used to populated the controls in the usercontrol displayed by the grid during edit mode.
Any idea how I can achieve this?
Many thanks
Antony
<
telerik:RadGrid ID="radGridMarkets" runat="server" AllowPaging="True" AutoGenerateColumns="False"
GridLines="None" OnNeedDataSource="radGridMarkets_NeedDataSource" PageSize="100"
Skin="Office2007">
<AlternatingItemStyle BackColor="#EDEFF1" BorderColor="Blue" />
<ItemStyle BorderStyle="Solid" />
<PagerStyle AlwaysVisible="True" Mode="Advanced" Position="TopAndBottom" />
<ClientSettings>
<Selecting AllowRowSelect="true" />
</ClientSettings>
<MasterTableView AllowFilteringByColumn="true">
<RowIndicatorColumn>
<HeaderStyle Width="20px" />
</RowIndicatorColumn>
<ExpandCollapseColumn>
<HeaderStyle Width="20px" />
</ExpandCollapseColumn>
<Columns>
<telerik:GridBoundColumn DataField="Tag" HeaderText="Tag" UniqueName="_colTag">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn
DataField="ShortDescription" HeaderText="Short Description"
UniqueName="_colMktShortDesc">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn
DataField="LongDescription" HeaderText="Long Description"
UniqueName="_colMktLongDesc">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="ExchngRateMarketTag" HeaderText="Exchange Rate Tag "
UniqueName="_colExchngRateMarketTag ">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="ConvertLocalCurrency"
HeaderText="Convert Local Currency " UniqueName="_colMktConvertLocalCurrency ">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="IndexConsolidation" HeaderText="Index Consolidation"
UniqueName="_colIndexConsolidation ">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="MarketConsolidation" HeaderText="Market Consolidation"
UniqueName="_colMarketConsolidation">
</telerik:GridBoundColumn>
</Columns>
</MasterTableView>
<FilterMenu EnableTheming="True">
<CollapseAnimation Duration="200" Type="OutQuint" />
</FilterMenu>
<EditItemStyle BorderStyle="Solid" />
</telerik:RadGrid></telerik:RadPageView
MyCustomFilteringColumn Class File
#region
Google Filter template Column
public class MyCustomFilteringColumn : GridBoundColumn
{
private object listDataSource = null;
//RadGrid calls this method when it initializes the controls inside the filtering item cells
protected override void SetupFilterControls(TableCell cell)
{
base.SetupFilterControls(cell);
cell.Controls.RemoveAt(0);
RadComboBox list = new RadComboBox();
list.ID =
"list" + this.DataField;
list.AutoPostBack =
true;
list.EnableLoadOnDemand =
true;
list.MarkFirstMatch =
true;
list.ShowToggleImage =
false;
list.SelectedIndexChanged +=
new RadComboBoxSelectedIndexChangedEventHandler(list_SelectedIndexChanged);
cell.Controls.AddAt(0, list);
cell.Controls.RemoveAt(1);
list.Width = 100;
list.DataTextField =
this.DataField;
list.DataValueField =
this.DataField;
list.DataSource =
this.ListDataSource;
list.DataBind();
}
protected void list_SelectedIndexChanged(object sender, EventArgs e)
{
GridFilteringItem filterItem = (sender as DropDownList).NamingContainer as GridFilteringItem;
if (this.DataType == System.Type.GetType("System.Int32") ||
this.DataType == System.Type.GetType("System.Int16") ||
this.DataType == System.Type.GetType("System.Int64"))
{
filterItem.FireCommandEvent(
"Filter", new Pair("EqualTo", this.UniqueName));
}
else // treat everything else like a string
filterItem.FireCommandEvent(
"Filter", new Pair("Contains", this.UniqueName));
}
public object ListDataSource
{
get { return this.listDataSource; }
set { listDataSource = value; }
}
//RadGrid calls this method when the value should be set to the filtering input control(s)
protected override void SetCurrentFilterValueToControl(TableCell cell)
{
base.SetCurrentFilterValueToControl(cell);
RadComboBox list = (RadComboBox)cell.Controls[0];
if (this.CurrentFilterValue != string.Empty)
{
list.SelectedValue =
this.CurrentFilterValue;
}
}
//RadGrid calls this method to extract the filtering value from the filtering input control(s)
protected override string GetCurrentFilterValueFromControl(TableCell cell)
{
RadComboBox list = (RadComboBox)cell.Controls[0];
return list.SelectedValue;
}
protected override string GetFilterDataField()
{
return this.DataField;
}
}
#endregion
Code Behind://Add Google Filtering for Market Columns
radGridMarkets.MasterTableView.Columns.Clear();
GridBoundColumn col2 = new MyCustomFilteringColumn();
radGridMarkets.Columns.Add(col2);
col2.DataField =
"Tag";
col2.UniqueName = radGridMarkets.MasterTableView.Name +
"_colMktTag";
col2.HeaderText =
"Tag";
GridBoundColumn col3 = new GridBoundColumn();
radGridMarkets.Columns.Add(col3);
col3.DataField =
"ShortDescription";
col3.UniqueName = radGridMarkets.MasterTableView.Name +
"_colMktShortDescription";
col3.HeaderText =
"Short Description";
GridBoundColumn col4 = new GridBoundColumn();
radGridMarkets.Columns.Add(col4);
col4.DataField =
"LongDescription";
col4.UniqueName = radGridMarkets.MasterTableView.Name +
"_colMktLongDescription";
col4.HeaderText =
"Long Description";
GridBoundColumn col5 = new GridBoundColumn();
radGridMarkets.Columns.Add(col5);
col5.DataField =
"ExchngRateMarketTag";
col5.UniqueName = radGridMarkets.MasterTableView.Name +
"_colMktExchngRateMarketTag";
col5.HeaderText =
"Exchange Rate Tag";
GridBoundColumn col6 = new GridBoundColumn();
radGridMarkets.Columns.Add(col6);
col6.DataField =
"ConvertLocalCurrency";
col6.UniqueName = radGridMarkets.MasterTableView.Name +
"_colMktConvertLocalCurrency";
col6.HeaderText =
"Convert Local Currency";
GridBoundColumn col7 = new GridBoundColumn();
radGridMarkets.Columns.Add(col7);
col7.DataField =
"IndexConsolidation";
col7.UniqueName = radGridMarkets.MasterTableView.Name +
"_colMktIndexConsildation";
col7.HeaderText =
"Index Consolidation";
GridBoundColumn col8 = new GridBoundColumn();
radGridMarkets.Columns.Add(col8);
col8.DataField =
"MarketConsolidation";
col8.UniqueName = radGridMarkets.MasterTableView.Name +
"_colMktMarketConsolidation";
col8.HeaderText =
"Market Consolidation";
#region
RadMarkets Data Binding
protected void radGridMarkets_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
if (!e.IsFromDetailTable)
{
int dbId = (int)HttpContext.Current.Session["INSTR_ID"];
List<InstrMarket> _lstmarket = _presenter.PopulateMarketsData(dbId);
foreach (GridBoundColumn column in radGridMarkets.MasterTableView.Columns)
{
if (column is MyCustomFilteringColumn)
{
List<String> itemsList = new List<String>();
foreach (InstrMarket item in _lstmarket)
{
itemsList.Add(item.Tag);
}
(column
as MyCustomFilteringColumn).ListDataSource = _lstmarket;
}
}
radGridMarkets.DataSource = _lstmarket;
}
}
private void radGridMarkets_ColumnCreating(object sender, GridColumnCreatingEventArgs e)
{
if ((e.ColumnType == typeof(MyCustomFilteringColumn).Name))
{
e.Column =
new MyCustomFilteringColumn();
}
}
protected void radGridMarkets_ItemCommand(object source, GridCommandEventArgs e)
{
if ((e.CommandName == "Filter"))
{
foreach (GridColumn column in e.Item.OwnerTableView.Columns)
{
column.CurrentFilterValue =
string.Empty;
column.CurrentFilterFunction =
GridKnownFunction.NoFilter;
}
}
}
#endregion
Hi, I have a database in which we collect some customer information for RMA's. I have it setup so that they can add multiple phone numbers and those numbers are displayed in a grid. The only problem is that when they go to add an RMA they either have to save the record and then enter in the phone numbers, or they insert the numbers without a valid FK. How can I enter the information to a grid and then on the form submit pull out this information and actually submit it with a valid ID?
Table layout.
RMA
table
RmaId
DateEntered
etc etc.
RMAPhone
Table
RmaPhoneId
RmaId
PhoneType
PhoneNumber
PhoneExtension
I am using the Telerik RAD AJAX Grid. I think it would be best to add the row's via JavaScript and then on the main form save go behind and grab each row but I'm usure how to actually accomplish this.
Thank you!
| Private Sub RenderMenu() |
| AddStyleSheet("~/RadControls_CustomSkin/Menu.RadControls_CustomSkin.css") |
| Dim PagesDC As New Dal.icms_PagesDataContext() |
| Dim results = PagesDC.icms_Pages_GetPageMenu() |
| RadMenu1.Skin = "RadControls_CustomSkin" |
| RadMenu1.DataTextField = "MenuName" |
| RadMenu1.DataFieldID = "ID" |
| RadMenu1.DataFieldParentID = "ParentID" |
| RadMenu1.EnableEmbeddedSkins = False |
| RadMenu1.OnClientItemClicked = "SetID()" |
| RadMenu1.DataSource = results |
| RadMenu1.DataBind() |
| End Sub |
| Protected Sub RadMenu1_ItemClick(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadMenuEventArgs) Handles RadMenu1.ItemClick |
| Dim HiddenID As HiddenField = DirectCast(Me.FindControl("HiddenID"), HiddenField) |
| End Sub 'RenderMenu |
| Protected Sub RadMenu1_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.RadMenuEventArgs) Handles RadMenu1.ItemDataBound |
| e.Item.NavigateUrl = "#ID=" & CType(DataBinder.Eval(e.Item.DataItem, "ID"), String) |
| End Sub 'RadMenu1_ItemDataBound |
| <script type="text/javascript"> |
| function SetID() |
| { |
| document.getElementById('<%= HiddenID.ClientID %>').value = window.location.hash; |
| } |
| </script> |
| <asp:HiddenField ID="HiddenID" runat="server" /> |