ASP.NET DetailsView изменение поля отображения для режима редактирования стихов - PullRequest
1 голос
/ 18 июля 2010

Для ASP.NET я использую DetailsView для вставки и редактирования записи. Для режима редактирования я не хочу отображать поле первичного ключа, потому что оно не должно быть изменено. Для режима вставки я хочу отобразить поле первичного ключа, потому что оно не существует, и пользователь может указать его через DropDownList, который гарантирует, что они выберут уникальное значение. TemplateField используется в разметке DetailsView для поля первичного ключа (отсюда DropDownList для режима вставки).

Моя проблема в том, что я не могу заставить поле первичного ключа не отображаться для режима редактирования и отображать для режима вставки. В разметке у меня есть:

<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>

С TemplateField Visible = "True", HeaderText = "name" всегда отображает то, что я не хочу для режима редактирования. С TemplateField Visible = "False" поле никогда не отображает то, что я не хочу для режима вставки.

Как мне добиться нужного мне режима отображения в режиме редактирования вставок. Я в порядке с изменением некоторого свойства программно, а не полагаюсь на чистый подход разметки, но я не могу найти решение.

Пожалуйста, сообщите!

1 Ответ

1 голос
/ 18 июля 2010

вы можете проверить режим просмотра деталей и посмотреть, находится ли он в режиме -Edit-. Затем вы можете скрыть 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;
}

И наконец, вы можете создать функцию в Code-Behind, которая проверяет текущее значение DetailsView и присваивает его свойству Visible вашего поля Template:

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

И внутри вашего поля шаблона:

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