У меня есть элемент управления представлением ASP.Net. Его DataSourceId меняется, и я установил его в Page_load соответственно ... (на основе подтипов LLBLgen, но это не слишком важно)Как условно отключить поле базы данных detailsview
Я думаю, что это жизненный цикл страницы leaky abstraction Я не «получаю».
Проблема заключается в том, что я связываю с полями, которые могут быть или не быть там в зависимости от источника данных ...
Чтобы «отключить» связанное поле при определенных условиях я попытался обертывание связанного поля в панель, которую я установил для видимого или невидимого кода, но я все равно получаю следующую ошибку:
Sys.WebForms.PageRequestManagerServerErrorException: DataBinding: Entity не содержит свойства с именем FilePrefix.
Я изменяю detaislview.datasourceid в pageload ... может быть, слишком поздно на жизненном цикле.
Я не хочу связываться с этим полем, поскольку он не существует для нового источника данных, но он пытается сделать это без изменений, и я получаю ошибку.
Любые идеи? ;)
[Изменено]: Код по запросу ...
ASP, DetailsView связанный столбец:
<asp:TemplateField>
<ItemTemplate>
<asp:Panel ID="pnlNormalAdditionalFields" runat="server" Visible="false">
<asp:textbox id="txtFilePrefix" runat="server" MaxLength="250" Width="180px" text='<%# Bind("FilePrefix") %>'></asp:textbox>
<asp:requiredfieldvalidator id="valFilePrefix" runat="server" errormessage="File Prefix is required." controltovalidate="txtFilePrefix">*</asp:requiredfieldvalidator>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
Code-за: (определить источник данных, detaislview видна на постбэка только сетка . отображается в начальной загрузке страницы)
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack) //initial load
{
}
else //postback
{
//set customdatasource for grid & detailsview
switch (radAccountType.SelectedValue)
{
case "Normal":
dvAccount.DataSourceID = "NormalCollectionDataSource";
AccountRadGrid.customDataSourceId = "NormalCollectionDataSource";
break;
case "Reseller":
dvAccount.DataSourceID = "ResellerCollectionDataSource";
AccountRadGrid.customDataSourceId = "ResellerCollectionDataSource";
break;
...
Показать/скрыть панель:
protected void dvAccount_OnPreRender(object sender, EventArgs e)
{
Panel pnlGroupStoreAdditionalFields = ControlHelper.FindControlFromTop(this, "pnlGroupStoreAdditionalFields", null) as Panel;
pnlGroupStoreAdditionalFields.Visible = false;
switch (radAccountType.SelectedValue)
{
...
case "GroupStore":
ddlAccountType.SelectedValue = Constants.Account.Type.GroupStore;
pnlGroupStoreAdditionalFields.Visible = true;
break;
}
}
}
Не могли бы вы выслать какой-нибудь код, пожалуйста? –