Обновление из GridView в Dropdown изменено - PullRequest
1 голос
/ 12 сентября 2009

У меня есть элемент управления GridView, в котором я хочу иметь 2 видимых поля, метку и раскрывающийся список. Вместо того чтобы использовать RowEditTemplate, я надеялся просто определить ItemTemplate как значение раскрывающегося списка.

В случае изменения раскрывающегося списка я хочу выполнить некоторый код, в котором я могу получить целочисленный ключ для этой строки таблицы и новое выбранное значение раскрывающегося списка. Примерно так:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="pk_id" onrowdeleting="GridView2_RowDeleting" 
        onrowcommand="GridView2_RowCommand">
        <Columns>
            <asp:BoundField DataField="pk_id" Visible="False" />
            <asp:BoundField DataField="Column1" HeaderText="Column1" />
            <asp:TemplateField HeaderText="Column2">
                <ItemTemplate>
                    <asp:DropDownList ID="DropDownList3" runat="server" 
                        DataSourceID="SqlDataSource" DataTextField="name" 
                        DataValueField="id2"
                        SelectedValue='<%# Bind("id2") %>' 
                        AutoPostBack="True">
                    </asp:DropDownList>
                    <asp:SqlDataSource ID="SqlDataSource" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:Main %>" 
                        SelectCommand="get_TestData" SelectCommandType="StoredProcedure">
                    </asp:SqlDataSource>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowDeleteButton="True" />
        </Columns>
    </asp:GridView>

Код за

protected void Page_Load(object sender, EventArgs e)
{
    ...
    GridView2.DataSource = new Person(id).GetDataSet();
    GridView2.DataBind();
}
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    // Call delete function with the key
    // Delete(key);
}
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
    // figure out which row sent it
    // UpdateRecord(key, newvalue)
}

Раскрывающийся список заполняется и значение выбирается правильно, но я не могу заставить удаление или обновление по раскрывающемуся списку работать должным образом. Я попытался реализовать эти функции, но RowCommand, похоже, не срабатывает, когда выпадающий список вызывает обратную передачу. Даже если это срабатывает, я не уверен, как получить нужные мне значения. Есть ли лучший способ, которым я должен идти об этом?

Ответы [ 2 ]

1 голос
/ 14 сентября 2009

Я заметил одну вещь в вашем коде, что вы вызывали GridView2.DataBind () при загрузке страницы .... попробуйте поместить его в Page Prerender, потому что, когда событие вызывается, оно вызывает загрузку страницы, и ваш gridview будет обновляться до событие обработано ....

однако не всегда это вызывает проблемы

0 голосов
/ 24 января 2014

попробуйте поместить этот код в свою загрузку страницы

protected void Page_Load(object sender, EventArgs e)
{
    if(!isPostback)
    {
    GridView2.DataSource = new Person(id).GetDataSet();
    GridView2.DataBind();
    }
}

это решит вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...