I have had to make changes to my FormTemplate fields to keep it from getting an error.
I believe it is because I have changed the fields from using selectedvalue and checked
set to a BIND to using Eval expressions. After making these changes when in edit mode
any changes put into the template fields don't seem to be populating the GridEditableItem
which I believe is the reason for the saves not going to the database now. If I remove
everything under the EditSettings then the grid goes back to successfully saving the
changes to the database. Below is both my markup and code behind. I can't hitting roadblock
after roadblock. Any help would be much appreciated?
Markup code:
Code Behind:
I believe it is because I have changed the fields from using selectedvalue and checked
set to a BIND to using Eval expressions. After making these changes when in edit mode
any changes put into the template fields don't seem to be populating the GridEditableItem
which I believe is the reason for the saves not going to the database now. If I remove
everything under the EditSettings then the grid goes back to successfully saving the
changes to the database. Below is both my markup and code behind. I can't hitting roadblock
after roadblock. Any help would be much appreciated?
Markup code:
<div class="WebpageManagementBox"> <br /><br /> <asp:Label ID="lblRolePrompt" Text="Select Role to associate web pages:" CssClass="box_Labels" runat="server"></asp:Label> <br /> <telerik:RadDropDownList ID="ddlRoles" runat="server" CssClass="wepageManagementDropDown" Width="200px" DataTextField="role" DataValueField="ID" AutoPostBack="true" OnItemSelected="ddlRoles_ItemSelected"></telerik:RadDropDownList> <br /> <br /> <telerik:RadGrid ID="RadGridwebpagemanagement" CssClass="webpageManagementGrid" MasterTableView-DataKeyNames="ID" runat="server" AllowFilteringByColumn="True" AllowSorting="True" GroupPanelPosition="Top" OnNeedDataSource="RadGridwebpagemanagement_NeedDataSource" OnUpdateCommand="RadGridwebpagemanagement_UpdateCommand" OnItemDataBound="RadGridwebpagemanagement_ItemDataBound" OnDeleteCommand="RadGridwebpagemanagement_DeleteCommand" OnInsertCommand="RadGridwebpagemanagement_InsertCommand"> <ClientSettings> <Scrolling AllowScroll="True" UseStaticHeaders="True" /> <Selecting AllowRowSelect="true" /> </ClientSettings> <GroupingSettings CaseSensitive="false" /> <MasterTableView AutoGenerateColumns="false" CommandItemDisplay="Top" CommandItemSettings-AddNewRecordText="Add New Webpage" InsertItemPageIndexAction="ShowItemOnCurrentPage"> <columns> <telerik:GridBoundColumn DataField="webpage_name" HeaderText="Web Page" UniqueName="webpage_name" ItemStyle-Font-Names="Arial" ItemStyle-Font-Bold="true" FilterControlWidth="200px"> <HeaderStyle Width="230px" Font-Names="Arial" /> <ItemStyle Width="230px" /> </telerik:GridBoundColumn> <telerik:GridCheckBoxColumn DataField="add_privledge" HeaderText="Allow Adds" UniqueName="add_privledge" FilterControlWidth="120px"> <HeaderStyle Width="120px" Font-Names="Arial" /> <ItemStyle Width="120px" /> </telerik:GridCheckBoxColumn> <telerik:GridCheckBoxColumn DataField="edit_privledge" HeaderText="Allow Edits" UniqueName="edit_privledge" FilterControlWidth="120px"> <HeaderStyle Width="120px" Font-Names="Arial" /> <ItemStyle Width="120px" /> </telerik:GridCheckBoxColumn> <telerik:GridCheckBoxColumn DataField="delete_privledge" HeaderText="Allow Deletes" UniqueName="delete_privledge" FilterControlWidth="120px"> <HeaderStyle Width="120px" Font-Names="Arial" /> <ItemStyle Width="120px" /> </telerik:GridCheckBoxColumn> <telerik:GridEditCommandColumn ButtonType="LinkButton" EditText="Edit" CancelText="Cancel" ItemStyle-Width="50px" HeaderStyle-Width="50px" FilterControlWidth="50px" /> <telerik:GridButtonColumn ConfirmText="Delete this product?" ConfirmDialogType="RadWindow" ConfirmTitle="Delete" ButtonType="LinkButton" Text="Delete" CommandName="Delete" ItemStyle-Width="50px" HeaderStyle-Width="50px" FilterControlWidth="50px" /> </columns> <EditFormSettings EditFormType="Template"> <FormTemplate> <div id="divGridEdit" class="divGrid"> <b>Add New Role to Webpage Association</b> <br /><br /> <table> <tr> <td><asp:Label Text="Web Page:" runat="server"></asp:Label></td> <td> <asp:DropDownList ID="ddlWebPages" DataSourceID="sqlDataSourceWebpages" AppendDataBoundItems="True" DataTextField="webpage_name" DataValueField="ID" SelectedValue='<%# DataBinder.Eval(Container.DataItem,"security_webpage_id") == DBNull.Value ? "" : DataBinder.Eval(Container.DataItem,"security_webpage_id") %>' runat="server"> <asp:ListItem Value=""></asp:ListItem> </asp:DropDownList> </td> </tr> <tr> <td><br /></td> <td></td> </tr> <tr> <td><asp:Label Text="Allow Add:" runat="server"></asp:Label></td> <td><asp:CheckBox ID="chkboxAllowAdd" Checked='<%# DataBinder.Eval(Container.DataItem,"add_privledge") == DBNull.Value ? false : DataBinder.Eval(Container.DataItem,"add_privledge") %>' runat="server" /></td> </tr> <tr> <td><asp:Label Text="Allow Edit:" runat="server"></asp:Label></td> <td><asp:CheckBox ID="chkboxAllowEdit" Checked='<%# DataBinder.Eval(Container.DataItem,"edit_privledge") == DBNull.Value ? false : DataBinder.Eval(Container.DataItem,"edit_privledge") %>' runat="server" /></td> </tr> <tr> <td><asp:Label Text="Allow Delete:" runat="server"></asp:Label></td> <td><asp:CheckBox ID="chkboxDelete" Checked='<%# DataBinder.Eval(Container.DataItem,"delete_privledge") == DBNull.Value ? false : DataBinder.Eval(Container.DataItem,"delete_privledge") %>' runat="server" /></td> </tr> <tr> <td><asp:Button ID="btnUpdate" Text='<%# (Container is GridEditFormInsertItem) ? "Insert" : "Update" %>' CommandName='<%# (Container is GridEditFormInsertItem) ? "PerformInsert" : "Update" %>' runat="server" /></td> <td><asp:Button ID="btnCancel" Text="Cancel" runat="server" CommandName="Cancel" CausesValidation="false" /></td> </tr> </table> </div> </FormTemplate> </EditFormSettings> </MasterTableView> <ClientSettings> <ClientEvents OnRowDblClick="rowDblClick" /> </ClientSettings> </telerik:RadGrid> </div> <asp:SqlDataSource ID="sqlDataSourceWebpages" runat="server" SelectCommand="SELECT * FROM dbo.security_webpage" ConnectionString="<%$ ConnectionStrings:GATEConnectionString %>"></asp:SqlDataSource> <telerik:RadWindowManager ID="RadWindowManager1" runat="server" />Code Behind:
using GATE_Entity;using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Telerik.Web.UI;using System.Collections;namespace FRC{ public partial class WebPageManagemet : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GATEEntities dbContext = new GATEEntities(); // Load Role Drop-down List var rolequery = from r in dbContext.Security_Role select r; IEnumerable<Security_Role> roles = rolequery.ToList(); ddlRoles.DataSource = roles; ddlRoles.DataBind(); } } protected void RadGridwebpagemanagement_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { int? selectedroleid = Convert.ToInt32(ddlRoles.SelectedValue); // Use LINQ query to populate radGrid GATEEntities dbContext = new GATEEntities(); var query = from srw in dbContext.Security_Role_To_Webpage join sw in dbContext.Security_Webpage on srw.security_webpage_id equals sw.ID where srw.security_role_id == selectedroleid select new { srw.ID, srw.security_webpage_id, sw.webpage_name, srw.add_privledge, srw.edit_privledge, srw.delete_privledge, srw.view_privledge }; //IEnumerable<Security_Role_To_Webpage> securitypages = query.ToList(); RadGridwebpagemanagement.DataSource = query.ToList(); } protected void ddlRoles_ItemSelected(object sender, Telerik.Web.UI.DropDownListEventArgs e) { RadGridwebpagemanagement.Rebind(); } protected void RadGridwebpagemanagement_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item.FindControl("ddlWebPages") != null ) { GridEditableItem editedItem = e.Item as GridEditableItem; DropDownList _ddl = (DropDownList)e.Item.FindControl("ddlWebPages"); if (_ddl != null) { _ddl.DataSourceID = ""; _ddl.Items.Clear(); ListItem newitem = new ListItem("",""); _ddl.Items.Add(newitem); _ddl.DataSource = this.sqlDataSourceWebpages; _ddl.DataTextField = "webpage_name"; _ddl.DataValueField = "ID"; _ddl.DataBind(); } } } protected void RadGridwebpagemanagement_DeleteCommand(object sender, GridCommandEventArgs e) { GATE_Entity.GATEEntities dbContext = new GATEEntities(); var editableItem = ((GridEditableItem)e.Item); var lookupID = (int)editableItem.GetDataKeyValue("ID"); // Retrieve Entity var webpagerecord = dbContext.Security_Role_To_Webpage.Where(n => n.ID == lookupID).FirstOrDefault(); if (webpagerecord != null) { // set for deletion dbContext.Security_Role_To_Webpage.Remove(webpagerecord); try { // Save changes to db dbContext.SaveChanges(); } catch (System.Exception) { } } } private void DisplayMessage(string text) { RadGridwebpagemanagement.Controls.Add(new LiteralControl(string.Format("<span style='color:red'>{0}</span>", text))); } protected void RadGridwebpagemanagement_UpdateCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) { GATEEntities dbContext = new GATEEntities(); var editableItem = ((GridEditableItem)e.Item); var lookupID = (int)editableItem.GetDataKeyValue("ID"); DropDownList ddlwebpage = (DropDownList)editableItem.FindControl("ddlWebPages"); var selectedval = Convert.ToInt32(ddlwebpage.SelectedValue); // Check to make sure user didn't select webpage for this role that is already within the role var roleid = Convert.ToInt32(ddlRoles.SelectedValue); var webpagerecexist = (from srw in dbContext.Security_Role_To_Webpage where srw.security_role_id == roleid && srw.security_webpage_id == selectedval && srw.ID != lookupID select srw).ToList(); // If Count > 0 then user chose drop down webpage that is already associated with role if (webpagerecexist.Count == 0) { // create sql criteria with which the changes will be applied to var webpagerecord = dbContext.Security_Role_To_Webpage.Where(n => n.ID == lookupID).FirstOrDefault(); if (webpagerecord != null) { // update entity's state editableItem.UpdateValues(webpagerecord); try { // Save changes to db dbContext.SaveChanges(); } catch (System.Exception) { } } } else { DisplayMessage("The webpage you selected already exists for this role!"); // keep in update mode e.Canceled = true; } } protected void RadGridwebpagemanagement_InsertCommand(object sender, GridCommandEventArgs e) { GATEEntities dbContext = new GATEEntities(); var editableItem = ((GridEditableItem)e.Item); Hashtable values = new Hashtable(); editableItem.ExtractValues(values); var newrec = dbContext.Security_Role_To_Webpage.Create(); newrec.security_webpage_id = (int?)values["security_webpage_id"]; newrec.security_role_id = (int?)values["security_role_id"]; newrec.add_privledge = (bool?)values["add_privledge"]; newrec.edit_privledge = (bool?)values["edit_privledge"]; newrec.delete_privledge = (bool?)values["delete_privledge"]; dbContext.SaveChanges(); } }}