Обновление из GridView в раскрывающемся списке изменено

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

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

<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 не срабатывает, когда раскрывающийся список вызывает обратную передачу. Даже если он сработает, я не уверен, как получить нужные мне значения. Есть ли лучший способ сделать это?


person Gavin H    schedule 11.09.2009    source источник
comment
Сложный. Включен ли ViewState для страницы?   -  person David Andres    schedule 12.09.2009


Ответы (2)


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

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

person Pankaj Kumar    schedule 14.09.2009
comment
Очень хороший момент, когда я попытался использовать другое решение, это действительно создало проблему. Я воспользовался вашим предложением, и оно отлично сработало. Спасибо! - person Gavin H; 15.09.2009

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

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

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

person tarzanbappa    schedule 24.01.2014