How can I set textbox to read only using a Telerik Radgrid UserControl - telerik

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;
}
}

Related

Telerik RadGrid EditTemplateColumn no value in textbox

I have a RadGrid and two columns. One Databound holding existing password and one EditTemplateColumn with a password confirmation textbox.
Since I want compare/validate the passwords I need to find the controls and the values.
The problem is that I can find the controls in the Radgrid ItemDataBound event, but not the inputed value for the confirm password textbox.
<telerik:GridBoundColumn DataField="Password" HeaderText="Password" UniqueName="Password" HeaderStyle-Width="130px" >
<ColumnValidationSettings EnableRequiredFieldValidation="true" EnableModelErrorMessageValidation="true">
<RequiredFieldValidator ForeColor="Red" ErrorMessage="Password is missing"></RequiredFieldValidator>
<ModelErrorMessage BackColor="Red" />
</ColumnValidationSettings>
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn UniqueName="PasswordConfirm" HeaderText="Confirm password" Display ="false" >
<EditItemTemplate>
<Telerik:RadTextBox ID="textBoxPasswordConfirm" Runat="server" >
</Telerik:RadTextBox>
<asp:RequiredFieldValidator runat="server" ControlToValidate="textBoxPasswordConfirm"
ForeColor="Red" ErrorMessage="Password missing" >
</asp:RequiredFieldValidator>
</EditItemTemplate>
</telerik:GridTemplateColumn>
Here is the corresponding code:
GridEditableItem item = e.Item as GridEditableItem;
TextBox pwd1 = (TextBox)item["Password"].Controls[0];
RadTextBox pwdconfirm = (RadTextBox)item["PasswordConfirm"].FindControl("textBoxPasswordConfirm");
string t1 = pwd1.Text;
// the next line gives an empty string, and I do not understand why ????
string t2 = pwdconfirm.Text;
TableCell cell = (TableCell)pwd1.Parent;
CompareValidator val = new CompareValidator();
val.ControlToValidate = pwd1.ID;
val.ControlToCompare = pwdconfirm.ID;
val.Operator = ValidationCompareOperator.NotEqual;
val.ErrorMessage = "Passwords do not match";
val.ForeColor = Color.Red;
cell.Controls.Add(val);

Populate ListBox in GridTemplateColumn in InsertItemTemplate

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();
}
}

Delete multiple row with radgrid

I am using Radgrid view with multi select row
I want to delete all selected records using checkbox in RadGrid
Code:
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False"
OnNeedDataSource="RadGrid1_NeedDataSource"
AllowMultiRowSelection="true">
<MasterTableView DataKeyNames="ID">
<Columns>
<telerik:GridClientSelectColumn>
</telerik:GridClientSelectColumn>
<telerik:GridBoundColumn DataField="Name" UniqueName="Name" HeaderText="Name">
</telerik:GridBoundColumn>
<telerik:GridEditCommandColumn>
</telerik:GridEditCommandColumn>
</Columns>
</MasterTableView>
<ClientSettings>
<Selecting AllowRowSelect="true" />
</ClientSettings>
</telerik:RadGrid>
.aspx.vb
Protected Sub Button1_Click(sender As Object, e As EventArgs)
For Each item As GridDataItem In RadGrid1.SelectedItems
If item.Selected Then
'Access data key
Dim strID As String = item.GetDataKeyValue("ID").ToString()
End If
NEXT
End Sub
The problem is when I use this method to get selected rows IDs to delete records, it is retrieving only one record ID and deleting the record for which the ID is retrieved.
Example: I am selecting records 1,2,3,4 and clicking the delete button, it is deleting only the record with ID=4
I don't know vs Basic very well. But I can say that,
you are loose your current ID knowledge in this command
Dim strID As String = item.GetDataKeyValue("ID").ToString()
every iteration in foreach, your strId variable update with new item id.
Maybe you can use concat string methods (maybe
strId += item.id
to save your all selected ids.
Try below code:
protected void Button1_Click(object sender, EventArgs e)
{
string strID = string.Empty;
foreach( GridDataItem grditem in RadGrid.SelectedItems)
{
if (grditem.Selected)
{
strID = strID + "," + grditem.GetDataKeyValue("ID").ToString();
}
}
if (strID != string.Empty)
{
//your delete logic for db
// pass strID it will contain 1,2,3,4
}
}

unable to insert Telerik RadGrid In-Place insert using OnInsertCommand e.item

I am trying to perform an insert using teleriks rad grid. I am doing an in-place insert and using the onInsertCommand method to set the values that are to be insertted. i found this statement in telerik's documnetation:
GridEditableItem editedItem = e.Item as GridEditableItem; when i use it editedItem is getting null value and i dont know how to make it work:
Here is my code behind for InsertCommand
protected void RadGrid1_InsertCommand(Object Sender, Telerik.Web.UI.GridCommandEventArgs e)
{
GridEditableItem editedItem = e.Item as GridEditableItem;
Hashtable newValues = new Hashtable();
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem);
editedItem.Edit = false;
Yieldco.RS.Libraries.BusinessObjects.UnitType u1 = new Yieldco.RS.Libraries.BusinessObjects.UnitType();
u1.Description = newValues["Description"].ToString();
u1.UnitTypeID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["UnitTypeID"]);
u1.CommunityID = 1;
u1.CompanyID = 1;
u1.Bathrooms = (float)Convert.ToDouble(newValues["Bathrooms"]);
u1.Bedrooms = Convert.ToInt32(newValues["Bedrooms"]);
u1.SqFtHigh = (float)Convert.ToDouble(newValues["SqFtHigh"]);
u1.SqFtLow = (float)Convert.ToDouble(newValues["SqFtLow"]);
u1.NumOfUnits = Convert.ToInt32(newValues["NumOfUnits"]);
u1.ProCon = Convert.ToInt32(newValues["ProCon"]);
u1.OthCon = Convert.ToInt32(newValues["OthCon"]);
u1.RentHigh = (float)Convert.ToDouble(newValues["RentHigh"]);
u1.RentLow = (float)Convert.ToDouble(newValues["RentLow"]);
u1.Status = 1;
int id = MSController.SaveUnitTypes(u1);
}
and my aspx radgrid
AutoGenerateColumns="false" AllowAutomaticUpdates="false" AllowAutomaticInserts="false" DataKeyNames="UnitTypeID" GridLines="Both"
EditItemStyle-Width="24px">
<%--
--%>
' runat="server" ID="Addnew" Text="Add New" CommandName="InitInsert" />
' runat="server" ID="CancelAdd" Text="Cancel" CommandName="CancelAll" />
' runat="server" ID="InsertNew" Text="Perform Insert" CommandName="PerformInsert" />
' runat="server" ID="EditAll" Text="Edit All" CommandName="EditAll" />
0 %>' runat="server" ID="CancelEdit" Text="Cancel" CommandName="CancelAll" />
0 %>' runat="server" ID="UpdateAll" Text="Update All" CommandName="UpdateAll" OnClientClick='javascript:return confirm("Are you sure you want to Update All Records?")' />
<asp:ObjectDataSource ID="odsGetUnitTypes" runat="server"
TypeName="Yieldco.RS.Libraries.Controllers.MSController"
DataObjectTypeName="Yieldco.RS.Libraries.BusinessObjects.UnitType"
SelectMethod="GetUnitTypesByCommunityID"
InsertMethod="SaveUnitTypes"
UpdateMethod="SaveUnitTypes"
>
<SelectParameters>
<asp:Parameter DefaultValue="1" Name="CommunityID" />
</SelectParameters>
</asp:ObjectDataSource>
Please help me out to make a sucessful insertion.
Also in the Telerik documentation I saw them using e.ite.item index for getting the vdatakeyvalue but if I use it the index is always showing up as -1 so I used editedItem.ItemIndex and it works fine
Thanks in advance
To reference the insert item, you should use the following syntax (as opposed to edited item):
if(e.CommandName = RadGrid.PerformInsertCommandName)
{
GridEditableItem editItem = e.Item.OwnerTableView.GetInsertItem();
}

Conditional Item Templates with RadComboBox

I have a RadComboBox that I am using to display department name and abbreviations. I am using an Item Template with a LinqDataSource to make each item appear as:
DeptAbbr - (DeptName)
Here is the code I am using to do this and it works fine:
<telerik:RadComboBox ID="rcbDepartments" runat="server" AppendDataBoundItems="True"
OnInit="rcbDepartments_Init" DataTextField="DepartmentAbbr" AutoPostBack="True"
DataSourceID="ldsDepartments" DataValueField="DepartmentID" HighlightTemplatedItems="true"
NoWrap="true" Width="250px">
<ItemTemplate>
<div>
<b>
<%# Eval("DepartmentAbbr")%></b><%# Eval("DepartmentName", " - ({0})") %>
</div>
</ItemTemplate>
</telerik:RadComboBox>
My question is this. I want to add an initial item in the list that is for "All Departments" and is the default item. I can do this easily, but the problem I'm having is that because I am not storing an "All Departments" entry in the database, the templating shows a blank space at the beginning of the items list when you pull down the combo box. I'm trying to find out if there is any way to template all but first item in the list?
Note: I have also tried do a conditional in the Eval like this:
<b><%# (Eval("DepartmentAbbr") != null) ? Eval("DepartmentAbbr") : "All Departments" %></b><%# Eval("DepartmentName", " - ({0})") %>
But it only evaluates on the items that are databound and not the initial item which I am sticking in manually. In other words, if I change the above statement to be:
<b><%# (Eval("DepartmentAbbr") == null) ? Eval("DepartmentAbbr") : "All Departments" %></b><%# Eval("DepartmentName", " - ({0})") %>
Then I just get a list with one blank item at the top and the rest reading "All Departments".
My work around for this problem has been to do some funky selection stuff with LINQ server side, but that has forced me to get rid of all templating and html formatting.
You can define the 'All Departments' RadComboBoxItem as a static item in the <Items> collection. Since you have enabled the AppendDataBoundItems property, you don't want to bind to your data source until after the control has already bound the static items; otherwise you'll get the blank space you are seeing when expanding the combo box. Also, use DataBinder.Eval(Container, "Text") to render the DepartmentAbbr field. Since you have set this field as the DataTextField for the control, that value will always render. If not, you'll get the empty space again when the control binds to the static item because it doesn't know what DepartmentAbbr is; it only has a Text field. Here's an example to get you going:
<telerik:RadComboBox ID="RadComboBox1" runat="server"
AppendDataBoundItems="True"
DataTextField="Abbr"
AutoPostBack="True"
DataValueField="DeptID"
HighlightTemplatedItems="true"
NoWrap="true"
Width="250px">
<Items>
<telerik:RadComboBoxItem runat="server" Text="All Departments" />
</Items>
<ItemTemplate>
<div>
<b><%# DataBinder.Eval(Container, "Text")%></b><%# Eval("Name", " - ({0})") %>
</div>
</ItemTemplate>
</telerik:RadComboBox>
public partial class _Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
RadComboBox1.Load += new EventHandler(RadComboBox1_Load);
}
protected void RadComboBox1_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Ensure the static items are already bound before assigning
// new data to the DataSource property
RadComboBox1.DataBind();
var departments = new[] {
new { DeptID = 1, Abbr = "ACME", Name = "ACME Corporation" },
new { DeptID = 2, Abbr = "MSFT", Name = "Microsoft Corporation" },
new { DeptID = 3, Abbr = "GOOG", Name = "Google, Inc" }
};
RadComboBox1.DataSource = departments;
RadComboBox1.DataBind();
}
}
}
Hope that helps!

Resources