У меня странная проблема с моим GridView.По сути, я пытаюсь выполнить команду удаления для таблицы.С сеткой просмотра связаны 3 поля: ItemId, ItemSummary и ItemDate.
Теперь, насколько я помню, во время изменения режима (скажем, между Select и Edit) эти поля автоматически передаются с использованием синтаксиса @ + FieldName(т.е. ItemId передается как @ItemId).
Поэтому, помня об этом, я попытался выполнить оператор delete, но он выдал ошибку, сообщив, что параметр не был передан.Поэтому я попробовал другой маршрут, чтобы программно извлечь ItemId и вставить его в качестве параметра во время выполнения.
Я пытался читать из DataItem, привязанного к элементу управления, но он продолжал возвращать ноль.
После некоторой дополнительной отладки я обнаружил, что когда данные изначально были связаны с элементом управления, он правильно создал DataItem, но как только режим был изменен, DataItem теперь имеет значение null.
Я пыталсяисправить это целую вечность, и это просто не будет работать.Вот мой код:
<asp:DetailsView FieldHeaderStyle-CssClass="bold" CssClass="marginLeftRightBottom10px center"
AutoGenerateDeleteButton="true" AutoGenerateEditButton="true" GridLines="Both"
ID="dvIndividualUpdate" AutoGenerateInsertButton="true" runat="server" AutoGenerateRows="False"
DataSourceID="sqldsSingleUpdate" OnDataBound="dvIndividualUpdate_DataBound">
<Fields>
<asp:TemplateField>
<HeaderTemplate>
Update Id:
</HeaderTemplate>
<ItemTemplate>
<asp:Label Text='<%# Eval("updateId") %>' ID="lblUpdateId" runat="server"></asp:Label>
</ItemTemplate>
<InsertItemTemplate>
<asp:Label Text='Auto Generated' ID="lblUpdateIdInsert" runat="server"></asp:Label>
</InsertItemTemplate>
<EditItemTemplate>
<asp:Label Text='Auto Generated' ID="lblUpdateIdEdit" runat="server"></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
Update Summary:
</HeaderTemplate>
<ItemTemplate>
<asp:Label Text='<%# Eval("updateSummary") %>' ID="lblUpdateSummary" runat="server"></asp:Label>
</ItemTemplate>
<InsertItemTemplate>
<asp:TextBox CssClass="tbUpdateSummaryInsert" TextMode="MultiLine" Text='<%# Bind("updateSummary") %>'
ID="tbUpdateSummary" runat="server"></asp:TextBox>
</InsertItemTemplate>
<EditItemTemplate>
<asp:TextBox CssClass="tbUpdateSummaryEdit" TextMode="MultiLine" Text='<%# Bind("updateSummary") %>'
ID="tbUpdateSummary" runat="server"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
Update Date:
</HeaderTemplate>
<ItemTemplate>
<asp:Label Text='<%# Eval("dateOfUpdate") %>' ID="lblDateOfUpdateInsert" runat="server"></asp:Label>
</ItemTemplate>
<InsertItemTemplate>
<asp:Label Text='' ID="lblEditDateOfUpdate" runat="server"></asp:Label>
</InsertItemTemplate>
<EditItemTemplate>
<asp:Label Text='<%# Eval("dateOfUpdate") %>' ID="lblDateOfUpdateEdit" runat="server"></asp:Label>
</EditItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
<asp:Label ID="lblUpdateErrors" runat="server" Text="" CssClass="block colorRed marginBottom10px center"></asp:Label>
<asp:SqlDataSource DataSourceMode="DataSet" ID="sqldsSingleUpdate" runat="server"
ConnectionString="<%$ ConnectionStrings:myDbConnection%>" SelectCommandType="StoredProcedure"
SelectCommand="dbo.getUpdate" InsertCommand="dbo.createUpdate" InsertCommandType="StoredProcedure"
OnInserted="sqldsSingleUpdate_Inserted" DeleteCommand="dbo.deleteUpdate" DeleteCommandType="StoredProcedure"
OnDeleted="sqldsSingleUpdate_Deleted" OnDeleting="sqldsSingleUpdate_Deleting">
<DeleteParameters>
<asp:Parameter Name="updateID" />
</DeleteParameters>
<SelectParameters>
<asp:ControlParameter Name="updateId" ControlID="gvUpdates" PropertyName="SelectedDataKey.Value" />
</SelectParameters>
<InsertParameters>
<asp:ControlParameter DbType="Date" ControlID="dvIndividualUpdate$lblEditDateOfUpdate"
Name="dateOfUpdate" PropertyName="Text" />
</InsertParameters>
</asp:SqlDataSource>
И мой связанный код:
protected void dvIndividualUpdate_DataBound(object sender, EventArgs e)
{
if (dvIndividualUpdate.CurrentMode == DetailsViewMode.Insert)
{
Label lbl = dvIndividualUpdate.FindControl("lblEditDateOfUpdate") as Label;
lbl.Text = DateTime.Today.ToString("dd-MM-yyyy");
}
}
protected void sqldsSingleUpdate_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
Exception ex = e.Exception;
lblUpdateErrors.Text = "There was a problem creating the update.";
ErrorSignal.FromCurrentContext().Raise(ex);
e.ExceptionHandled = true;
return;
}
else
{
lblUpdateErrors.Text = "Update created successfully.";
gvUpdates.DataBind();
}
}
protected void sqldsSingleUpdate_Deleted(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
Exception ex = e.Exception;
lblUpdateErrors.Text = "There was a problem deleting the update.";
ErrorSignal.FromCurrentContext().Raise(ex);
e.ExceptionHandled = true;
return;
}
else
{
lblUpdateErrors.Text = "Update deleted successfully.";
gvUpdates.DataBind();
}
}
Большое спасибо