what i need to accomplish is i need that control in this case dropdown list in the same row and not below, could any of you guys please guide me with this.
I have done it using Grid view using the row edit command something like this
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { string name,idval; name = ((Label)GridView1.Rows[e.NewEditIndex].FindControl("lbl_trainer")).Text ; idval = ((Label)GridView1.Rows[e.NewEditIndex].FindControl("lbl_trainerid")).Text; DropDownList1.Enabled = false; GridView1.EditIndex = e.NewEditIndex; bind(); DropDownList drp_trg = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("drp_trg"); drp_trg.SelectedIndex = drp_trg.Items.IndexOf(new ListItem(name, idval)); } source looks something like this...
<asp:GridView ID="GridView1" runat="server" Width="100%" EmptyDataRowStyle-HorizontalAlign="center" AutoGenerateColumns="False" AlternatingItemStyle-CssClass="Gridalt" CssClass="Gridrow" DataKeyNames="progname,sch_no" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowDataBound="GridView1_RowDataBound" > <Columns> <asp:TemplateField HeaderText="Status"> <EditItemTemplate> <asp:DropDownList ID="grd_drp_status" runat="server" SelectedValue='<%# Bind("status") %>' > <asp:ListItem Selected="True">Scheduled</asp:ListItem> <asp:ListItem>Completed</asp:ListItem> <asp:ListItem>Cancelled</asp:ListItem> </asp:DropDownList> </EditItemTemplate> <ItemTemplate> <asp:Label ID="lbl_status" runat="server" Width="100%" Text='<%# Bind("status") %>'></asp:Label> </ItemTemplate> <ItemStyle HorizontalAlign="Center" /> </asp:TemplateField> </asp:GridView> i want to accomplish the same thing in Radgrid could you please guide me through this....
and p.s i am using Radgrid version 2009.1.311.35
9 Answers, 1 is accepted
To display the grid column editors inline when the grid switches into edit mode, change the table view's EditMode property to "InPlace".
This is demonstrated here: Automatic Operations
And use GridDropdDownColumn in order to show DropDownList control when editing the grid. Also you can set the ReadOnly property of other columns to "True", to prevent editing.
-Shinu.
thanks again for your help...
The grid in the code library uses EditMode "EditForms". Since you are using EditMode as "InPlace", you need to use GridDataInsertItem instead of GridEditFormInsertItem.
In place
Edit forms
Could you point out where you are getting error, when trying to manually insert/update the grid?
Thanks,
Princy.
in the updatecommand event
protected
void RadGrid1_UpdateCommand(object source, GridCommandEventArgs e)
{
//Get the GridEditableItem of the RadGrid
GridEditableItem editedItem = e.Item as GridEditableItem;
//Get the primary key value using the DataKeyValue.
string EmployeeID = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["EmployeeID"].ToString();
//Access the textbox from the edit form template and store the values in string variables.
string LastName = (editedItem["LastName"].Controls[0] as TextBox).Text;
string FirstName = (editedItem["FirstName"].Controls[0] as TextBox).Text;
string Title = (editedItem["Title"].Controls[0] as TextBox).Text;
string Address = (editedItem["Address"].Controls[0] as TextBox).Text;
string City = (editedItem["City"].Controls[0] as TextBox).Text;
}
(editedItem["City"].Controls[0] as TextBox).Text;
i have a dropdownlist instead of textbox and the city is datafield right so in mycase i have an item template so what should i add there.
also if you could tell me how to validate my dropdown list it wold help a lot
this is my source
<telerik:RadGrid ID="RadGrid1" runat="server" GridLines="None" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Width="97%" OnNeedDataSource="RadGrid1_NeedDataSource" OnUpdateCommand="RadGrid1_UpdateCommand"> <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle> <MasterTableView DataKeyNames="Project_code" GridLines="None" Width="100%" EditMode="InPlace" > <Columns> <telerik:GridEditCommandColumn UniqueName="EditCommandColumn" ButtonType="imagebutton" /> <telerik:GridTemplateColumn HeaderText="Project Code" UniqueName="Project_code"> <ItemTemplate> <asp:Label ID="lbl_project_code" runat="server" Text='<%# Bind("Project_code") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Project Name" UniqueName="Project_name"> <ItemTemplate> <asp:Label ID="lbl_project_name" runat="server" Text='<%# Bind("Project_name") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Status" UniqueName="Status"> <EditItemTemplate> <asp:DropDownList ID="cboStatus" runat="server"> <asp:ListItem>Select</asp:ListItem> <asp:ListItem>Active</asp:ListItem> <asp:ListItem>Pending</asp:ListItem> <asp:ListItem>Delayed</asp:ListItem> </asp:DropDownList> </EditItemTemplate> <ItemTemplate > <asp:Label ID="lbl_status" runat="server" Text='<%# Bind("Project_status") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> <EditFormSettings ColumnNumber="2" CaptionFormatString="Edit details for employee with ID {0}" CaptionDataField="Project_code"> <FormTableItemStyle Wrap="False"></FormTableItemStyle> <FormCaptionStyle ></FormCaptionStyle> <FormMainTableStyle CellSpacing="0" CellPadding="3" Width="100%" /> <FormTableStyle GridLines="Horizontal" CellSpacing="0" CellPadding="2" Height="110px" Width="100%" /> <FormTableAlternatingItemStyle Wrap="False"></FormTableAlternatingItemStyle> <FormStyle Width="100%" BackColor="#EEF2EA"></FormStyle> <EditColumn UpdateText="Update record" UniqueName="EditCommandColumn1" CancelText="Cancel edit"> </EditColumn> <FormTableButtonRowStyle HorizontalAlign="Right" ></FormTableButtonRowStyle> </EditFormSettings> <ExpandCollapseColumn Visible="False"> <HeaderStyle Width="19px"></HeaderStyle> </ExpandCollapseColumn> <RowIndicatorColumn Visible="False"> <HeaderStyle Width="20px" /> </RowIndicatorColumn> </MasterTableView> </telerik:RadGrid>this is code behind update command
protected void RadGrid1_UpdateCommand(object source, GridCommandEventArgs e) { //Get the GridEditableItem of the RadGrid GridEditableItem editedItem = e.Item as GridEditableItem; //Get the primary key value using the DataKeyValue. string projectcode = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Project_code"].ToString(); //Access the DROPDOWN from the edit form template and store the values in string variables. string status = (editedItem["Status"].Controls[0] as DropDownList).SelectedItem.Text; try { //Open the SqlConnection SqlConnection.Open(); //Update Query to update the Datatable string updateQuery = "UPDATE tbl_project_details SET Project_status = '"+ status +"' WHERE Project_code = '"+ projectcode +"'"; SqlCommand.CommandText = updateQuery; SqlCommand.Connection = SqlConnection; SqlCommand.ExecuteNonQuery(); //Close the SqlConnection SqlConnection.Close(); } catch (Exception ex) { } } thanks for the help...
In order to get the selected value of DropDownList, access the control and typecast to DropDownList as shown below.
C#:
protected void RadGrid1_UpdateCommand(object source, GridCommandEventArgs e) { //Get the GridEditableItem of the RadGrid GridEditableItem editedItem = e.Item as GridEditableItem; //Access the DROPDOWN from the edit form template and store the values in string variables. string status = (editedItem["Status"].FindControl("cboStatus") as DropDownList).SelectedItem.Text; . . . . . . . . . . . . . . . . }You can validate the DropDownList using RequiredFieldValidator like below.
ASPX:
<telerik:GridTemplateColumn HeaderText="Status" UniqueName="Status"> <EditItemTemplate> <asp:DropDownList ID="cboStatus" runat="server"> <asp:ListItem>Select</asp:ListItem> <asp:ListItem>Active</asp:ListItem> <asp:ListItem>Pending</asp:ListItem> <asp:ListItem>Delayed</asp:ListItem> </asp:DropDownList> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" Text="(Required)" InitialValue="Select" ControlToValidate="cboStatus" runat="server" /> </EditItemTemplate> </telerik:GridTemplateColumn>Thanks,
Princy.
Thanks Princy for the reply but i am facing a new problem
this is my grid
<telerik:RadGrid ID="RadGrid1" runat="server" GridLines="None" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" Skin="Web20" AutoGenerateEditColumn="True" onupdatecommand="RadGrid1_UpdateCommand" oneditcommand="RadGrid1_EditCommand" onitemdatabound="RadGrid1_ItemDataBound" > <MasterTableView Width="100%" DataKeyNames="Project_code" EditMode="InPlace" > <Columns> <telerik:GridTemplateColumn HeaderText="Project Code" ItemStyle-Width="27%"> <ItemTemplate> <asp:Label ID="lbl_project_code" runat="server" Text='<%# Bind("Project_code") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Project Name" ItemStyle-Width="23%"> <ItemTemplate> <asp:Label ID="lbl_project_name" runat="server" Text='<%# Bind("Project_name") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Status" ItemStyle-Width="25%"> <EditItemTemplate> <asp:DropDownList ID="cboStatus" runat="server" AppendDataBoundItems="true" DataSourceID="sqldatasource2" > <%--<asp:ListItem>Select</asp:ListItem> <asp:ListItem>Active</asp:ListItem> <asp:ListItem>Complete</asp:ListItem> <asp:ListItem>Visible to Managers only</asp:ListItem>--%> </asp:DropDownList> </EditItemTemplate> <ItemTemplate > <asp:Label ID="lbl_status" runat="server" Text='<%# Bind("Project_status") %>'></asp:Label> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> <EditFormSettings> <EditColumn UniqueName="EditCommandColumn1" UpdateImageUrl="images/updating.gif" ItemStyle-Width="20%" EditImageUrl="images/edit.gif" ></EditColumn> </EditFormSettings> </MasterTableView> </telerik:RadGrid>i have added a datasource to bind the list items in the dropdownlist.
so when in edit mode i am not getting the value of the dropdown instead i am getting system.data.datarowview
this is what i did in my code behind but i am kind not understanding where i am going wrong...
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item is GridEditFormItem && e.Item.IsInEditMode) { GridEditFormItem gridEditFormItem = (GridEditFormItem)e.Item; DropDownList dropDownList = (DropDownList)gridEditFormItem["lbl_status"].FindControl("cboStatus"); dropDownList.DataSourceID = "sqldatasource2"; dropDownList.DataTextField = "Project_status"; dropDownList.DataValueField = "Project_status"; dropDownList.DataBind(); } }any help is appreciated...
You can easily achieve this by setting the DataTextField and DataValueField of DropDownList from mark up like below.
ASPX:
<telerik:GridTemplateColumn HeaderText="Status" UniqueName="Status"> <EditItemTemplate> <asp:DropDownList ID="cboStatus" runat="server" AppendDataBoundItems="true" DataSourceID="sqldatasource3" DataTextField="Project_status" DataValueField="Project_status"> </asp:DropDownList> </EditItemTemplate></telerik:GridTemplateColumn>Or if you want to populate the DripDownList from code behind, try the following code snippet.
ASPX:
<telerik:GridTemplateColumn HeaderText="Status" UniqueName="Status"> <EditItemTemplate> <asp:DropDownList ID="cboStatus" runat="server" AppendDataBoundItems="true" > </asp:DropDownList> </EditItemTemplate></telerik:GridTemplateColumn>C#:
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item is GridEditableItem && e.Item.IsInEditMode) { GridEditableItem gridEditFormItem = (GridEditableItem)e.Item; DropDownList dropDownList = (DropDownList)gridEditFormItem.FindControl("cboStatus"); dropDownList.DataSourceID = "sqldatasource2"; dropDownList.DataTextField = "Project_status"; dropDownList.DataValueField = Project_status"; dropDownList.DataBind(); } }Thanks,
Princy.
Sorry for this but i keep getting this error in ItemDataBound event
DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Project_status'.
Can you suggerst something???
Princy thanks once again.
Got it to work problem was the field name that was given in the table and the field name that i was passing in the text and the value field did not match. Glad this is over and excuse the carelessness on my part.