2010-07-18 134 views
1

對於ASP.NET,我使用DetailsView插入和編輯記錄。對於編輯模式,我不想顯示主鍵字段,因爲它不應該改變。對於插入模式,我想顯示主鍵字段,因爲它不存在,用戶可以通過DropDownList指定它,以確保它們將選擇唯一值。在主鍵字段的DetailsView標記中使用TemplateField(因此插入模式爲DropDownList)。ASP.NET DetailsView編輯經文插入模式的變化字段顯示

我的問題是,我不能讓主鍵字段不顯示編輯模式和顯示插入模式。在標記我:

<asp:TemplateField HeaderText="name" InsertVisible="True" Visible="True"> 
    <InsertItemTemplate> 
     <asp:DropDownList ID="ddl2NonMembers" runat="server" 
      Width="155px" 
      Sourceless="sqlNonMembers" 
      DataTextField="name" 
      DataValueField="id_adm" 
      SelectedValue='<%# Bind("member_grp") %>'> 
     </asp:DropDownList> 
    </InsertItemTemplate> 
</asp:TemplateField> 

隨着模板列可見=「真」,該的HeaderText =「名稱」總是顯示我不想爲編輯模式。使用TemplateField Visible =「False」,該字段從不顯示插入模式不需要的字段。

如何才能實現我想插入詩句編輯模式的顯示行爲。我很擅長以編程方式更改某些屬性,而不是依靠純粹的標記方法,但我無法弄清楚解決方案。

請指教!

回答

1

您可以測試詳細視圖模式並查看它是否處於編輯模式。然後,您可以通過編程方式隱藏DropDownList。

if (myDetailsView.CurrentMode == DetailsViewMode.Edit) 
{ 
    DropDownList ddl2NonMembers = (DropDownList)myDetailsView.FindControl("ddl2NonMembers"); 
    ddl2NonMembers.Visible = false; 
} 

此外,您可以隱藏整個列,但您需要知道該列的索引。假設列索引#5,你可以這樣做:

if (myDetailsView.CurrentMode == DetailsViewMode.Edit) 
{ 
    myDetailsView.Columns[5].Visible = false; 
} 

最後,您可以創建在代碼隱​​藏的功能,它檢查DetailsView控件的當前值,並將其分配給您的模板字段的Visible屬性:

public bool showPKField() { 
    bool result = true; 
    if(myDetailsView.CurrentMode == DetailsViewMode.Edit) 
     result = false; 
    return result; 
} 

而且你的模板場內:

<asp:TemplateField HeaderText="name" InsertVisible="True" Visible='<%# showPKField() %>'> 
+0

我需要切換整列是否可以是可見的,所以我第二個選項去了,但是我不得不使用myDetailsView.Fiel ds [5] .Visible = false(標記的TemplateField位於標記內,用於GridView)。 – harrije 2010-07-18 10:19:32

+0

對不起,我沒有在VS中測試過,是的,它是Fields集合。我的壞:) – Marko 2010-07-18 19:45:20

+0

我不知道有關InsertVisible屬性。這個爲我工作,我把它變成了假。 +1 – Brabbeldas 2013-09-11 11:37:04

相關問題