J'ai un contrôle de vue détaillée ASP.Net. Son DataSourceId varie et je le place dans Page_load en conséquence ... (basé sur les sous-types LLBLgen, mais ce n'est pas trop important)Comment désactiver de manière conditionnelle un champ de base de données detailview
Je suppose que c'est un cycle de vie de page leaky abstraction Je ne suis pas "getting".
Le problème est que je lie aux champs qui peuvent ou peuvent ne être là en fonction de la source de données ...
Pour « désactiver » un champ lié dans certaines conditions que j'ai essayé envelopper le champ lié dans une panneau que j'ai défini à visible ou invisible dans code-behind, mais j'obtiens toujours l'erreur suivante:
Sys.WebForms.PageRequestManagerServerErrorException: DataBinding: Entity ne contient pas une propriété avec le nom 'FilePrefix'.
Je change le detaislview.datasourceid en pageload ... pourrait être trop tard dans le cycle de vie.
Je ne veux pas me lier à ce champ, car il n'existe pas pour la nouvelle source de données, mais il essaie de le faire tout de même et j'obtiens l'erreur.
Des idées? ;)
[Edited]: Code comme demandé ...
ASP, colonne liée de 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 sous-jacent: (déterminer la source de données, detaislview est visible seulement lors de la publication en grille est . affiché en charge de la page initiale)
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;
...
Afficher/panneau cacher:
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;
}
}
}
Pourriez-vous poster un message s'il vous plait? –