#c# #.net #asp.net #gridview #objectdatasource
#c# #.net #asp.net #gridview #objectdatasource
Вопрос:
Доброе утро, пожалуйста, у меня зависимый GridView, и я хочу удалить строку, но это не работает. Проблема: метод ‘SmazOrdinacniDobu’ (для удаления) имеет тип параметра OrdinacniDoba, но этот параметр пуст… Почему? 🙁 (Но обновление работает нормально …)
<asp:ObjectDataSource ID="odsOrdinacniHodiny" runat="server"
DataObjectTypeName="Praktik.DB.OrdinacniDoby.OrdinacniDoba"
DeleteMethod="SmazOrdinacniDobu" InsertMethod="VytvorNovou"
SelectMethod="VratVseOrdinaci"
TypeName="Praktik.DB.OrdinacniDoby.OrdinacniDoby"
UpdateMethod="UpravOrdinacniDobu">
<SelectParameters>
<asp:ControlParameter ControlID="gwOrdinace" DefaultValue="0" Name="id"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="gwOrdinacniDoba" runat="server" AutoGenerateColumns="False"
EnableModelValidation="True"
onrowupdating="gwOrdinacniDoba_RowUpdating"
DataSourceID="odsOrdinacniHodiny" AutoGenerateDeleteButton="True"
EnableViewState="False">
<Columns>
<asp:CommandField ButtonType="Image"
CancelImageUrl="~/App_Themes/ZdravotnickaZarizeni/design/cancel.png"
EditImageUrl="~/App_Themes/ZdravotnickaZarizeni/design/pencil.png"
ShowEditButton="True"
UpdateImageUrl="~/App_Themes/ZdravotnickaZarizeni/design/check.png" />
<asp:BoundField DataField="IDOrdinacniDoby" HeaderText="ID Ordinační doby" />
<asp:BoundField DataField="IDOrdinace" HeaderText="ID Ordinace" />
<asp:BoundField DataField="PlatnostOd" HeaderText="Platnost od data" DataFormatString="{0:D}" />
<asp:BoundField DataField="PlatnostDo" HeaderText="Platnost do data" DataFormatString="{0:D}" />
<asp:BoundField DataField="Den" HeaderText="Den v týdnu" />
<asp:BoundField DataField="RezervaceOd" HeaderText="Rezervace od" />
<asp:BoundField DataField="RezervaceDo" HeaderText="Rezervace do" />
<asp:BoundField DataField="OpakovatPoTydnech" HeaderText="Opakovat po týdnech" />
<asp:CheckBoxField DataField="Pritomen" HeaderText="Přítomen?" />
<asp:CommandField ButtonType="Image"
DeleteImageUrl="~/App_Themes/ZdravotnickaZarizeni/design/non.png"
ShowDeleteButton="True" />
</Columns>
</asp:GridView>
Комментарии:
1. Извините, я не могу понять вопрос, не могли бы вы перевести OrdinacniDoba, пожалуйста?
2. ‘OrdinacniDoba’ => Часы работы. Я хочу установить часы работы для операционных (я имею в виду комнату).
Ответ №1:
Привяжите первичный ключ вашего источника данных в gridview к атрибуту DataKeyNames. В команде row или событии удаления строки найдите этот ключ и удалите строку.
Комментарии:
1. хорошо, я установил DataKeyNames в значение PrimaryKey, и, похоже, это работает… НО: параметром ‘SmazOrdinacniDobu’ (DeleteOpeningHour) является класс ‘OterviraciDoba’ (OpeningHour), и он по-прежнему пуст, установлен только PrimaryKey (я использую его как параметр для процедуры сохранения в БД). Как можно (где) Я получаю (устанавливаю) все свойства для класса ‘OrdinacniDoba’ (через час открытия)? В событии удаления строки? (найдите строку по PK, удалите параметр и добавьте param.?)
2. Вместо передачи всего класса, OterviraciDoba, почему вы не можете установить значение строки. Если возможно, вставьте какой-нибудь CS-код. Это было бы gr8.
3. Я думаю, это было лучше всего для жизненного цикла приложения. Немного кода: ASPX-страница и CodeBehind , менеджер бизнес-входа (DeleteOpeningHour) и подробности
Ответ №2:
Прежде всего, вы не предоставили DataKeyNames
в свой gridview. Во-вторых, вы не предоставили Delete method parameter
<DeleteParameters>
<asp:Parameter Name="ParameterName" Type="Int32" />
</DeleteParameters>
Комментарии:
1. Параметр ‘SmazOrdinacniDobu’ (RemoveOpeningHour) является классом ‘OterviraciDoba’ (OpeningHour). Итак, я должен переписать ее в параметр int?