Не обновляйте раскрывающийся список gridview при редактировании
У меня есть простой gridview, извлекающий данные из таблицы базы данных SQL-server. Он имеет 2 каскадных выпадающих списка. Это простая практика asp.net веб-приложение на языке C#. Я использую “вариант командное поле в качестве” в столбце “редактирование”.
То, что я пытаюсь сделать, - это настроить выпадающие списки в gridview так, чтобы они сохраняли свои текущие значения при нажатии кнопки edit. Как бы то ни было, когда я нажимаю кнопку edit, она обновляет страницу / gridview и возвращает второй выпадающий список к первому выбору в меню. Я хочу, чтобы он сохранил свое первоначальное значение, если только первый выпадающий список не будет изменен.
Это позволит мне изменить другие поля, не затрагивая два выпадающих списка.
Этот простой gridview имеет только 5 столбцов:
Изменить – (для кнопки Изменить)
ID – (не редактируемый столбец)
Имя – (простое текстовое поле)
Производитель – ( 1-й выпадающий список “ddlManufacturer”)
Model – ( 2-й выпадающий список “ddlModel”)
Я попробовал установить “AutoPostBack=false” в gridview и в обоих выпадающих списках.
Я также попытался изменить команды “e.NewValue” на странице aspx.cs на “e.OldValue” но, похоже, ничего не работает. Каждый раз, когда я нажимаю кнопку Изменить, он сбрасывает второй выпадающий список на первое значение в списке.
Любая помощь будет очень признательна.
Спасибо.
Что я уже пробовал:
Мой код aspx:
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server"> <div> <%-- GRIDVIEW --%> <div> <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" OnRowUpdating="GridView1_RowUpdating" AutoGenerateColumns="False" DataKeyNames="CustomerId" CellPadding="4" ForeColor="#333333" GridLines="Both" > <AlternatingRowStyle BackColor="White" /> <Columns> <%-- Modify Column --%> <asp:CommandField ShowEditButton="True" HeaderText="Modify" /> <%-- CustomerId Column --%> <asp:BoundField DataField="CustomerId" HeaderText="ID" SortExpression="CustomerId" ReadOnly="true" /> <%-- Name Column --%> <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> <%-- Manufacturer Column --%> <asp:TemplateField HeaderText="Manufacturer" SortExpression="Manufacturer"> <EditItemTemplate> <asp:DropDownList ID="ddlManufacturer" runat="server" AutoPostBack="True" DataTextField="Manufacturer" DataValueField="Manufacturer" Width="122px" SelectedValue='<%# Bind("Manufacturer") %>' DataSourceID="SqlDataSource2" > </asp:DropDownList> <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:CarsConnectionString %>" SelectCommand="SELECT [Manufacturer] FROM Manufacturer"></asp:SqlDataSource> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%# Bind("Manufacturer") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <%-- Model Column --%> <asp:TemplateField HeaderText="Model" SortExpression="Model"> <EditItemTemplate> Model: <asp:DropDownList ID="ddlModel" runat="server" DataSourceID="SqlDataSource3" DataTextField="Model" DataValueField="Model"> </asp:DropDownList> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="ddlModel" InitialValue="Select" ErrorMessage="Select a Model" ></asp:RequiredFieldValidator> <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:CarsConnectionString %>" SelectCommand="SELECT [Model],[Manufacturer] FROM [Model] " FilterExpression="[Manufacturer]= '{0}'"> <FilterParameters><asp:ControlParameter ControlID="ddlManufacturer" Name="Manufacturer" PropertyName="SelectedValue" Type="String" /> </FilterParameters> </asp:SqlDataSource> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("Model") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <%-- GridView Color Scheme --%> <EditRowStyle BackColor="#7C6F57" /> <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#E3EAEB" /> <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#F8FAFA" /> <SortedAscendingHeaderStyle BackColor="#246B61" /> <SortedDescendingCellStyle BackColor="#D4DFE1" /> <SortedDescendingHeaderStyle BackColor="#15524A" /> </asp:GridView> <%-- DataSource for GridView --%> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:CarsConnectionString %>" SelectCommand="SELECT [CustomerId], [Name], [Manufacturer], [Model] FROM [Customers] ORDER BY CustomerId" InsertCommand="INSERT INTO [Customers] ([Name], [Manufacturer], [Model]) VALUES (@Name, @Manufacturer, @Model)" UpdateCommand="UPDATE [Customers] SET [Name] = @Name, [Manufacturer] = @Manufacturer, [Model] = @Model WHERE [CustomerId] = @CustomerId" DeleteCommand="DELETE FROM [Customers] WHERE [CustomerId] = @CustomerId"> </asp:SqlDataSource> </div> </div> </asp:Content>
Мой aspx-файл.в CS (код позади):
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Configuration; using System.Data.Sql; using System.Data; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace CascadingGridview6 { public partial class Contact : Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { } } SqlConnection con = new SqlConnection(@"Data Source=dsouthres18v;Initial Catalog=Cars;Integrated Security=True"); public int NewEditIndex { get; private set; } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { string strModel = ((DropDownList)((GridView)sender).Rows[e.RowIndex].FindControl("ddlModel")).SelectedValue; string strManufacturer = ((DropDownList)((GridView)sender).Rows[e.RowIndex].FindControl("ddlManufacturer")).SelectedValue; e.NewValues[ "Model"] = strModel; e.NewValues[ "Manufacturer"] = strManufacturer; e.Cancel = false; GridView gv = (GridView)sender; for (int i = 0; i < gv.Columns.Count; i++) { DataControlFieldCell cell = gv.Rows[e.RowIndex].Cells[i] as DataControlFieldCell; gv.Columns[i].ExtractValuesFromCell(e.NewValues, cell, DataControlRowState.Edit, true); } } } }
Karthik_Mahalingam
вы пробовали использовать панель обновления ?
[no name]
Я думал об этом, но если я помещу gridview в панель обновления; когда я нажму кнопку edit (то есть в gridview), это обновит / обновит gridview, даже если он находится в панели обновления. (Я думаю) я не очень хорошо знаком с тем, как работает панель обновления. Спасибо за предложение.
[no name]
Я все еще ищу ответ на этот вопрос, если кто-нибудь может мне помочь. Возможно ли это вообще? Спасибо.
[no name]
Кроме того, панель обновления не работает. Я попробовал вложить оба раскрывающихся списка в панель обновления, и я попробовал вложить каждую часть 2 раскрывающихся меню. Пока ничего не работает. Пожалуйста, посоветуйте. Спасибо.