How do I populate a listbox that is located in the InsertItemTemplate? I need to poplulate this after someone clicks the add new record button and I need to do this in the code behind after they click.
There are few ways of doing it. I prefer Template Edit Form. Here is the sample.
<telerik:RadGrid ... OnItemDataBound="RadGrid1_ItemDataBound">
<MasterTableView DataKeyNames="Id" CommandItemDisplay="Top">
<Columns>
<telerik:GridButtonColumn .../>
</Columns>
<EditFormSettings ColumnNumber="1" EditFormType="Template">
<FormTemplate>
<asp:ListBox .../>
</FormTemplate>
</EditFormSettings>
</MasterTableView>
</telerik:RadGrid>
Updated:
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridEditFormItem && e.Item.IsInEditMode)
{
var item = e.Item as GridEditFormItem;
var listBox1 = item.FindControl("ListBox1") as ListBox;
// Fills listbox with data
listBox1.DataSource = listboxdata;
listBox1.DataBind();
}
}
Related
I have a Telerik RadGrid using a User Control for edit an Insert. Configured like this
<MasterTableView AutoGenerateColumns="false" CommandItemDisplay="Top"
DataKeyNames="Form_UsageId" Font-Size="Medium"
NoMasterRecordsText="No Transfer Locker Records Added" InsertItemPageIndexAction="ShowItemOnCurrentPage"
CommandItemSettings-AddNewRecordText="Add New Transfer Locker Entry">
<Columns>
<telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn"></telerik:GridEditCommandColumn>
<telerik:GridBoundColumn UniqueName="CaseNumber" HeaderText="Case Number" DataField="CaseNumber"></telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="ItemCount" HeaderText="# of Items" DataField="ItemCount"></telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="PersonFor" HeaderText="Person Intended For" DataField="PersonIntendedFor"></telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="PersonAdding" HeaderText="Person Putting In" DataField="PersonAdding"></telerik:GridBoundColumn>
<telerik:GridDateTimeColumn DataField="DateIn" HeaderText="Date Put In"
PickerType="DatePicker" EnableTimeIndependentFiltering="true" DataFormatString="{0:MM/dd/yyyy}">
</telerik:GridDateTimeColumn>
<telerik:GridBoundColumn UniqueName="TotalDays" HeaderText="# Days Open" DataField="TotalDays"></telerik:GridBoundColumn>
</Columns>
<EditFormSettings UserControlName="TransferLockerUserControl.ascx" EditFormType="WebUserControl" PopUpSettings-Modal="false">
<EditColumn UniqueName="EditCommandColumn1"></EditColumn>
</EditFormSettings>
</MasterTableView>
I am using a User Control for editing a record and I need to set some of the text boxes to read only. This is what I have tried
if (e.Item.IsInEditMode && e.Item is GridEditableItem)
{
if (e.Item.ItemIndex == -1)
{
// insert
GridEditableItem item = e.Item as GridEditableItem;
}
else
{
// edit
GridEditableItem item = e.Item as GridEditableItem;
(item["CaseNumber"].Controls[0] as TextBox).ReadOnly = true;
}
}
This fails and generates the error
Can someone help me fix this?
I was able to find the answer to this problem I have posted the working code below.
if (e.Item.IsInEditMode && e.Item is GridEditableItem)
{
if (e.Item.ItemIndex == -1)
{
// insert
GridEditableItem item = e.Item as GridEditableItem;
}
else
{
// edit
GridEditableItem item = e.Item as GridEditableItem;
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
TextBox txt = (TextBox)userControl.FindControl("txtCaseNumber"); //access TextBox here
txt.ReadOnly = true;
}
}
I'm using ASP.NET AJAX telerik control.
When I use radcombobox autocomplete in Radgrid control, it works.
But when I design it into master/detail radgrid, it failed.
Because the radcombobox autocomplete is in the master grid, when I into detail editmode, code behind ItemDataBound part trigger, cause an error.
So how can I do to trigger the ItemDataBound when Master in edit mode, but not trigger when detail in edit mode? or what condition that can tell which (master or detail) in edit mode?
Thanks in advance.
We can distinguish master and detail grid by using name property. Please try with the below code snippet.
.ASPX
<telerik:RadGrid>
<MasterTableView Name="Parent">
<DetailTables>
<telerik:GridTableView Name="Detail">
<Columns>
.........
.........
</Columns>
</telerik:GridTableView>
</DetailTables>
<Columns>
.........
.........
</Columns>
</MasterTableView>
</telerik:RadGrid>
.CS
private void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
if (e.Item.OwnerTableView.Name == "Parent")
{
//Master table
}
else if (e.Item.OwnerTableView.Name == "Detail")
{
//Detail table
}
}
I have a div with its own id in the ItemTemplate of a GridTemplateColumn of a RadGrid.
How can I access this div from the code behind?
If it was a div in the web page I could access it just by typing its id but this method does not work now that it is nested inside the grid.
Please use this example.
in Aspx page
<telerik:GridTemplateColumn>
<ItemTemplate>
<div id="divlayer" runat="server">
Hello
</div>
</ItemTemplate>
</telerik:GridTemplateColumn>
In CS
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem item = (GridDataItem)e.Item;
HtmlGenericControl container = (HtmlGenericControl)item.FindControl("divlayer");
}
}
Hope it might help you..
I have a peculiar problem and I am not sure if anyone had come across this problem earlier. however the issue goes like this..
I have a grid with combination of TemplateColumns and BoundColumns and when I filter the grid using the filters under template columns I can see the results in UI (grid) but when I do the same in BoundColumns I do not see any results.. !!!
Funny thing is I can see the output from the query and its returns the correct number of results from DB. and its also assigned to the GridDataSource in the NeedDataSource event. however I cannot find the GridDataItem in the ItemDataBoundItem, I can fetch only headeritem, filteritem and footeritem.
It shows "No records to display" even when there are lot of records assigned to the DataSource.
Here I am attaching the screenshot, where you can see that the records count is displayed but not the records.. !!
Any help is highly appreciated.
here is the code sample
<ps:MassApprovalAjaxPanel runat="server" ID="m_UIRadAjaxPanel" LoadingPanelID="m_UIAsynBindLoadPanelInMasterPage">
<ps:MassApprovalRadGrid
runat="server"
ID="m_UIListingGrid"
SkinID="Grid_MassApproval"
OnNeedDataSource="ListingGrid_NeedDataSource"
OnItemDataBound="ListingGrid_ItemDataBound"
AllowFilteringByColumn="true"
EnableViewState="true">
<MasterTableView
DataKeyNames="CardID, WeekEnding, ClientPONumber"
ShowFooter="true">
<Columns>
<ps:NumericTextBoxTemplateColumn
UniqueName="CardID"
Width="70"
RelativeWidthRatio="90">
<ItemTemplate>
<asp:Label
runat="server"
Text='<%# string.Format("{0}/{1}", Eval(Constants.CARD_ID), Eval(Constants.VERSION)) %>' />
</ItemTemplate>
</ps:NumericTextBoxTemplateColumn>
<ps:TextBoxBoundColumn
UniqueName="ClientPONumber"
DataField="ClientPONumber"
Width="60"
RelativeWidthRatio="80" />
<telerik:GridClientSelectColumn UniqueName="SelectAll" HeaderText="All" />
</Columns>
</MasterTableView>
</ps:MassApprovalRadGrid>
</ps:MassApprovalAjaxPanel>
protected void ListingGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
m_UIListingGrid.DataSource = RadGridUtilUI.MassApprovalResultsGet();
}
protected void ListingGrid_ItemDataBound(object sender, GridItemEventArgs e)
{
GridDataItem gridDataItem = e.Item as GridDataItem;
if (gridDataItem != null)
{
AddClientScripts(gridDataItem);
}
}
Thanks,
Preetham.
I found fix for this issue, it was quite simple and straight forward but we did not notice it.
protected void ListingGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
m_UIListingGrid.MasterTableView.FilterExpression = string.Empty;
m_UIListingGrid.DataSource = RadGridUtilUI.MassApprovalResultsGet();
}
Telerik has two types of filtering which is inbuilt filtering and user defined filtering that we do it through our SP's and Code. so we always have to set the filter value to null before doing our custom filtering.
Mark this as answer.
Thanks,
Preetham.
I have a repeater that contains a Telerik RadComboBox:
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<telerik:RadComboBox ID="rcb" runat="server" EnableLoadOnDemand="true"
AllowCustomText="true" ItemRequestTimeout="1000"
NumberOfItems="10" MarkFirstMatch="false">
</telerik:RadComboBox>
</ItemTemplate>
</asp:Repeater>
In the ItemDataBound event of the Repeater, I am wiring up the ItemsRequested event like this:
private void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) {
RadComboBox rcb = (RadComboBox)e.Item.FindControl("rcb");
rcb.ItemsRequested += rcb_ItemsRequested;
}
private void rcb_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e) {
// Database call to load items occurs here.
// As configured, this method is never called.
}
Currently, the server-side rcb_ItemsRequested method is never called. I suspect that wiring the ItemsRequested event in the ItemDataBound is problematic, but the problem may lie elsewhere.
Any ideas on how to use the Telerik RadComboBox within a repeater properly?
Have you tried putting the event handler wiring in the markup rather than adding it dynamically?
Also - you are probably aware, but just in case - ItemsRequested is an event that only fires under certain conditions. To quote the docs:
The ItemsRequested event occurs when the EnabledLoadOnDemand property is True and the user types text into the input field or clicks on the drop-down toggle image when the list is empty. - Reference
Does your scenario match the above?
EDIT:
I've tested some code. The following works (The ItemsRequested Event fires for the all ComboBoxes and adds the three test items to the dropdown on the fly..):
Markup:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<ItemTemplate>
<br />
<telerik:RadComboBox ID="rcb" runat="server" EnableLoadOnDemand="true" AllowCustomText="true"
ItemRequestTimeout="1000" NumberOfItems="10" MarkFirstMatch="false" />
</ItemTemplate>
</asp:Repeater>
</form>
code behind:
protected void Page_Load(object sender, EventArgs e)
{
List<string> data = new List<string>();
data.Add("Item 1");
data.Add("Item 2");
//add some items to the repeater to force it to bind and repeat..
rpt.DataSource = data;
rpt.DataBind();
}
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//wire the event
RadComboBox rcb = (RadComboBox)e.Item.FindControl("rcb");
rcb.ItemsRequested += rcb_ItemsRequested;
}
protected void rcb_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)
{
//add the items when requested.
(sender as RadComboBox).Items.Add(new RadComboBoxItem("Item1", "1"));
(sender as RadComboBox).Items.Add(new RadComboBoxItem("Item2", "2"));
(sender as RadComboBox).Items.Add(new RadComboBoxItem("Item3", "3"));
}