#c# #asp.net #gridview #drop-down-menu
#c# #asp.net #gridview #выпадающее меню
Вопрос:
У меня возникли проблемы с настройкой всех моих параметров обновления. Большинство полей в моем GridView привязаны к данным, но два из них представляют собой выпадающие списки, в одном из которых указаны элементы списка, а другой извлекается из другого источника данных. Я хотел бы установить их значения в качестве UpdateParameters для отправки в мою хранимую процедуру, когда пользователь нажимает «Обновить» в GridView. Хотя я не уверен, как это сделать.
Вот код, с которым я работаю, два выпадающих списка — «ddlTransferLocation» и «ddlReconcileStatus».:
ИСТОЧНИК ДАННЫХ
<asp:SqlDataSource ID="reconcileDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="GetReconcileItems" SelectCommandType="StoredProcedure"
UpdateCommand="UpdateReconcileItems" UpdateCommandType="StoredProcedure">
<UpdateParameters>
<asp:Parameter Name="ItemID" />
<asp:Parameter Name="TransType" Type="String" />
<asp:Parameter Name="LocationID" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Stat" Type="String" />
<asp:Parameter Name="TransferLocation" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
ОБНОВЛЕНИЕ СТРОКИ В C #
protected void reconcileGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DropDownList ddlReconcileStatus = (DropDownList)reconcileGrid.Rows[e.RowIndex].Cells[0].FindControl("ddlReconcileStatus");
reconcileDataSource.UpdateParameters["Stat"].DefaultValue = ddlReconcileStatus.SelectedValue.ToString();
}
ASP.NET GRIDVIEW
<asp:UpdatePanel ID="reconcileUpdatePanel" runat="server">
<ContentTemplate>
<asp:GridView ID="reconcileGrid" runat="server" AutoGenerateColumns="False"
DataKeyNames="ItemID" DataSourceID="reconcileDataSource" OnRowUpdating="reconcileGrid_RowUpdating" >
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ReadOnly="true" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" ReadOnly="true"/>
<asp:BoundField DataField="last_known_location" HeaderText="Last Known Location" SortExpression="last_known_location" ReadOnly="true" />
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:Label ID="lblStatus" runat="server" Text='<%# evalStatus(Eval("Stat")) %>'></asp:Label></ItemTemplate><EditItemTemplate>
<asp:DropDownList ID="ddlReconcileStatus" runat="server" OnSelectedIndexChanged="ddlReconcileStatus_SelectedIndexChanged" AutoPostBack="true" >
<asp:ListItem Value="3" Text="Allocated"></asp:ListItem><asp:ListItem Value="4" Text="Transferred"></asp:ListItem></asp:DropDownList></EditItemTemplate></asp:TemplateField><asp:TemplateField HeaderText="Transfer Location" Visible="false" >
<EditItemTemplate>
<asp:DropDownList ID="ddlTransferLocation" runat="server"
DataSourceID="ddlTransferLocationDataSource" DataTextField="Name"
DataValueField="ID" Enabled="true" ></asp:DropDownList>
<asp:SqlDataSource
ID="ddlTransferLocationDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [ID], [Name] FROM [TransferLocation]">
</asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ItemID" HeaderText="ItemID" ReadOnly="true" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
Ответ №1:
Я думаю, вам следует использовать SqlDataSource.Updating
событие и сделать что-то вроде
DropDownList ddlReconcileStatus = (DropDownList)reconcileGrid.Rows[reconcileGrid.EditIndex].Cells[0].FindControl("ddlReconcileStatus");
reconcileDataSource.UpdateParameters["Stat"].DefaultValue = ddlReconcileStatus.SelectedValue.ToString();
Комментарии:
1. Хорошо, я попробую. Хотя я получаю, что для «EditRowIndex» не найден метод расширения
2.Извините, это должно быть
EditIndex
msdn.microsoft.com/en-us/library /…3. Я вижу, что он получает правильное значение и обновляет параметр, но на самом деле он никогда не запускает хранимую процедуру. Я не получаю никаких ошибок, просто ничего не происходит.
4. После некоторого тестирования может показаться, что ни одно из моих связанных полей не связано с UpdateParameters. По какой-либо причине это могло произойти?