I have a simple RadGrid with this design:
<div id="Grid"> <telerik:RadGrid RenderMode="Lightweight" runat="server" AllowPaging="true" ID="RadGrid1" AutoGenerateColumns="false" OnItemCommand="RadGrid1_ItemCommand" OnItemCreated="RadGrid1_ItemCreated" OnPreRender="RadGrid1_PreRender1" OnItemDataBound="RadGrid1_ItemDataBound" OnNeedDataSource="RadGrid1_NeedDataSource" AllowAutomaticDeletes="false" AllowAutomaticInserts="true" AllowAutomaticUpdates="true" > <MasterTableView DataKeyNames="UserID" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage"> <Columns> <telerik:GridEditCommandColumn UniqueName="EditCommandColumn"> </telerik:GridEditCommandColumn> <telerik:GridBoundColumn DataField="UserID" HeaderText="User ID" ReadOnly="true" ForceExtractValue="Always" ConvertEmptyStringToNull="true" Visible="false"/> <telerik:GridTemplateColumn UniqueName="ActiveColumn" HeaderText="Active"> <ItemTemplate> <asp:Label ID="lblActive" runat="server" Text='<%# Convert.ToBoolean(Eval("Active")) == true ? "Yes" : "No" %>'></asp:Label> </ItemTemplate> <InsertItemTemplate> <asp:CheckBox runat ="server" ID="chkInsertActive" /> </InsertItemTemplate> <EditItemTemplate> <asp:CheckBox runat="server" ID ="chkActive" Checked='<%# DataBinder.Eval(Container.DataItem,"Active") %>' /> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Role"> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem,"Role") %> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="ddlRole" runat="server" ></asp:DropDownList> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn UniqueName="FirstNameColumn" HeaderText="First Name"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem,"FirstName") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtFirstName" runat="server" Text='<%# Bind("FirstName") %>'></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="* First Name Is Required" ForeColor="Red" ControlToValidate="txtFirstName"></asp:RequiredFieldValidator> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Last Name"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "LastName") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtLastName" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="* Last Name Is Required" ForeColor="Red" ControlToValidate="txtLastName"></asp:RequiredFieldValidator> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="User Name"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "UserName") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtUserName" runat="server" Text='<%# Bind("UserName") %>'></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="* User Name Is Required" ForeColor="Red" ControlToValidate="txtUserName"></asp:RequiredFieldValidator> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn HeaderText="Email Address"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "EmailAddress") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmail" runat="server" Text='<%# Bind("EmailAddress") %>'></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ErrorMessage="* Email Is Required" ForeColor="Red" ControlToValidate="txtEmail"></asp:RequiredFieldValidator> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridTemplateColumn> <ItemTemplate> <asp:Button ID="btnDelete" CssClass="btn btn-xs btn-danger" Text="Delete" runat="server" OnClick="BtnDelete_Click" OnClientClick="confirmAspButton(this); return false;"> </asp:Button> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView> <PagerStyle Mode="NextPrevAndNumeric" /> </telerik:RadGrid> </div>
Then I created C# code to filter the Grid by user and or Role with this code. I am not showing all of the code just enough to give a picture of what I am working with:
if (txtName.Text.Length > 0 && ddlRole.SelectedIndex == 0){ string a = txtName.Text; using (ExpungeEntities db = new ExpungeEntities()) { RadGrid1.DataSource = db.USERS_T_DATA.Where(c => c.FirstName.Contains(a) || c.LastName.Contains(a)).ToList(); { RadGrid1.Rebind(); int intGridCount = RadGrid1.Items.Count; if (intGridCount == 0) { DisplayMessage("No records matched your search"); txtName.Text = string.Empty; } } }}
The code works as expected and I endup with a filtered grid. but here is the issue I am trying to solve. When I click the "edit" icon that was created by my use of the AllowAutomaticUpdates I am presented with the first row in the grid for updating instead of the intended row. I have taken a screen shot that shows the issue to help explain.
How can I get the correct row to display for edit?