ASP.NET (VB): GridView с ImageButton> Заполнить текстовое поле с комментариями - PullRequest
0 голосов
/ 31 августа 2010

Прошло так много времени с тех пор, как я закодировал страницу в VB. Что касается жизни, я просто не могу вспомнить, как это сделать.

У меня есть GridView на странице ASP. В каждой строке есть комментарий ImageButton. У меня уже есть gridview и текстовое поле, обернутое в UpdatePanel. Сетка показывает всю правильную информацию. Мне просто нужно добавить код, чтобы заполнить текстовое поле комментарием, когда пользователь нажимает на кнопку ImageButton этой строки.

Комментарии хранятся в БД SQL 2005, если это имеет значение. Стоит ли засунуть комментарии в скрытое поле вида сетки или есть функция, которая позволит мне запросить базу данных для этого конкретного комментария.

Конечная цель - не обновлять страницу, если это возможно.

Ваша помощь очень важна, чтобы помочь мне преодолеть блок этого писателя!

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

ОК, вы можете сделать это в любом случае, с HiddenField или просмотрев в БД.

* 1004 скрытых *

В ItemTemplate, который содержит ImageButton, добавьте атрибуты CommandName и CommandArgument к ImageButton и HiddenField, который привязан к полю комментария из базы данных:

<asp:TemplateField HeaderText="Comment">
    <ItemTemplate>
        <asp:ImageButton ID="btnComment" runat="server" ImageUrl="images/comment.gif" CommandName="SelectComment" CommandArgument='<%# Container.DataItemIndex %>' />
        <asp:HiddenField runat="server" id="CommentHiddenField" Value='<%# Eval("Comment") %>' />
    </ItemTemplate>
</asp:TemplateField>

В выделенном фрагменте кода добавьте метод для обработки события RowCommand для GridView:

Private Sub Gridview2_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles Gridview2.RowCommand

    Dim rowIndex As Integer
    Dim commentHiddenField As HiddenField

    If e.CommandName = "SelectComment" Then
        rowIndex = Integer.Parse(e.CommandArgument.ToString)

        commentHiddenField = DirectCast(Gridview1.Rows(rowIndex).Cells(5).FindControl("CommentHiddenField"), HiddenField)

        txtComments.Text = commentHiddenField.Value
    End If

End Sub

БД Поиск

Добавить атрибуты в ImageButton:

<asp:TemplateField HeaderText="Comment">
    <ItemTemplate>
        <asp:ImageButton ID="btnComment" runat="server" ImageUrl="images/comment.gif" CommandName="SelectComment" CommandArgument='<%# Container.DataItemIndex %>' />
    </ItemTemplate>
</asp:TemplateField>

В выделенном фрагменте кода добавьте метод для обработки события RowCommand для GridView:

Private Sub Gridview2_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles Gridview2.RowCommand

    Dim rowIndex As Integer
    Dim key As String

    rowIndex = Integer.Parse(e.CommandArgument.ToString)

    key = Gridview1.DataKeys(rowIndex).Value.ToString

    txtComments.Text = GetCommentFromDB(key)
End Sub
0 голосов
/ 31 августа 2010

Вот разметка ...

        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        <tr class="dvrow" align="center">
         <td style="text-align:left;" colspan="2">History<br />
          <div id="div1" style="width:600px;">
            <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
                  GridLines="None" DataKeyNames="RepIssueHistoryID"
              DataSourceID="sqlIssueHistory" Width="600px" AllowSorting="True" 
                  AllowPaging="True" CssClass="grid"  RowStyle-Height="15px">
              <PagerStyle CssClass="footer" />
              <Columns>
                  <asp:TemplateField HeaderText="Mail">
                      <ItemTemplate>
                          <asp:CheckBox ID="chkMailComment" runat="server" />
                      </ItemTemplate>
                  </asp:TemplateField>
                <asp:BoundField DataField="RepIssueStatus" SortExpression="RepIssueStatus"  
                      HeaderText="Status" ItemStyle-Width="120px" >
<ItemStyle Width="120px"></ItemStyle>
                  </asp:BoundField>
                <asp:BoundField DataField="RepIssuePriority" SortExpression="RepIssuePriority"  
                      HeaderText="Priority" ItemStyle-Width="100px" >
<ItemStyle Width="100px"></ItemStyle>
                  </asp:BoundField>
                <asp:BoundField DataField="User" SortExpression="User"  HeaderText="Rep" 
                      ItemStyle-Width="180px" >
<ItemStyle Width="180px"></ItemStyle>
                  </asp:BoundField>
                <asp:BoundField DataField="DateUpdate" SortExpression="DateUpdate"  
                      HeaderText="Date" ItemStyle-Width="200px" >
<ItemStyle Width="200px"></ItemStyle>
                  </asp:BoundField>
                  <asp:TemplateField HeaderText="Comment">
                    <ItemTemplate>
                      <asp:ImageButton ID="btnComment" runat="server" ImageUrl="images/comment.gif" />
                    </ItemTemplate>
                  </asp:TemplateField>
                  <asp:TemplateField HeaderText="Attachment">
                    <ItemTemplate>
                      <asp:ImageButton ID="btnAttachment" runat="server"    ImageUrl="images/folder.gif" />
                    </ItemTemplate>
                  </asp:TemplateField>
              </Columns>
                <EmptyDataTemplate>
                  No history currently exists.<br />
                </EmptyDataTemplate>
    <RowStyle Height="15px"></RowStyle>

                <EmptyDataRowStyle CssClass="empty" />
            </asp:GridView>
          </div>
          </td>
        </tr>

        <tr class="dvrow" align="center">
          <td style="text-align:left;" colspan="2">Rep Comment<br />
            <asp:TextBox ID="txtComments" runat="server" TextMode="MultiLine" 
            Width="600px" Height="180px" ReadOnly="true"  />
          </td>
        </tr>
</ContentTemplate>
        </asp:UpdatePanel>

Таким образом, основная идея состоит в том, чтобы кто-то щелкнул btnComment в любой строке, и этот комментарий затем отобразился бы в txtComment.Надеюсь, это объясняет это лучше.

...