Как использовать поле кнопки в gridview

Я использую этот вид сетки:

<asp:GridView ID="gvMessages" runat="server" AutoGenerateColumns = "false" 
    CaptionAlign="NotSet" CellPadding="5" onrowcommand="gvMessages_RowCommand">
    <Columns>
        <asp:TemplateField HeaderText="Avändare">
            <ItemTemplate>
                <%# GetSender((int)Eval("Sender"))%>
                <br />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Ämne">
            <ItemTemplate>
                <%# Eval("Head")%>
                <br />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:ButtonField Text="Öppna" CommandName="Open" />
    </Columns>
</asp:GridView>

Я хочу, чтобы в текстовом поле отображался член сообщения связанного объекта (Eval («Сообщение»)) строки, по которой был сделан щелчок.


person Chris Hippo    schedule 09.01.2013    source источник
comment
когда устанавливается Message? когда вы нажимаете строку или кнопку, которая запускает gvMessages_RowCommand?   -  person balexandre    schedule 09.01.2013
comment
В gridview есть источник данных, состоящий из списка почтовых объектов. Почтовый объект имеет следующие члены: Сообщение, Получатель, Чтение, Отправитель, Голова. Как видите, члены Sender и Head отображаются в сетке, но я хочу, чтобы сообщение отображалось в текстовом поле, когда я нажимаю кнопку этой строки.   -  person Chris Hippo    schedule 09.01.2013
comment
Итак, все, что вам действительно нужно, это показать/скрыть div, который будет содержать сообщение... верно?   -  person balexandre    schedule 09.01.2013
comment
да. Это отображает сообщение о нажатии кнопки строки.   -  person Chris Hippo    schedule 09.01.2013


Ответы (1)


из комментариев, и я бы предложил показать/скрыть в клиенте, чтобы вы могли сэкономить туда и обратно на сервер

<asp:GridView ID="gvMessages" runat="server" AutoGenerateColumns = "false" 
    CaptionAlign="NotSet" CellPadding="5">
    <Columns>
        <asp:TemplateField HeaderText="Avändare">
            <ItemTemplate>
                <%# GetSender((int)Eval("Sender"))%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Ämne" DataField="Head" />

        <asp:TemplateField HeaderText="Avändare">
            <ItemTemplate>
                <button class="btn-showmsg">Öppna</button>
                <div class="message hide">
                    <asp:TextBox runat="server"
                         TextMode="MultiLine" Text="<%= Eval("Message") %>" />
                </div>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

и в джаваскрипте

$(function() {

    $(".btn-showmsg").click(function() {
        var tr  = $(this).closest("tr"), // the <tr>
            msg = tr.find(".message");   // the div wraping the message

        msg.show(); // show it
    });

});

Теперь, позиция и размещение сообщения, все зависит от вас, но я бы предложил что-то вроде Modal Bootstrap, чтобы показать его.

также не забудьте добавить стиль .hide { display: none; }

person balexandre    schedule 09.01.2013
comment
конечно, но зачем? зачем вам тратить время на обратный путь к серверу, чтобы снова загрузить всю страницу, если все, что вам нужно, уже есть? - person balexandre; 09.01.2013