1

GridViewを設定しました:

<asp:GridView id="GridView1" Runat="server" AutoGenerateColumns="False" OnRowCommand = "GridView1_RowCommand" EnableViewState="true">
   <Columns>
       <asp:TemplateField HeaderText="Delete" ItemStyle-HorizontalAlign="Center"> 
            <ItemTemplate><asp:Button runat="server" ID="Delete" ImageUrl="~/images/Close.gif" CommandName="DeleteRow" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>"/></ItemTemplate></asp:TemplateField>

       <asp:TemplateField HeaderText="Comment" ItemStyle-Width="175px">
            <ItemTemplate><textarea class="raTextBox" id="txtItemComment" rows="4" cols="30"></textarea></ItemTemplate></asp:TemplateField> 
   </Columns>   
</asp:GridView>

コードビハインドのRowCommandは、次のように設定されます。

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
   If (e.CommandName = "DeleteRow") Then
     //do stuff here

GridViewは、次のようにページロードでデータバインドされます。

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  If Not IsPostBack Then
     Session("CalledModule") = "RCMT0021"
  Else
      With ViewState
           _intRepor = CInt(.Item("Report"))
      End With
  End If
     DataBind()   //Gridview Load
End Sub

私の質問:

  1. 行コマンドイベントが発生することはありません。ページはPage_LoadのELSE(Not is Postback)に入るだけです
  2. 各行の[コメント]列(TEXTAREA)に入力された内容をすべて追跡し、[変更を保存](フォーム)ボタンをクリックしたときにデータをデータベースに保存するにはどうすればよいですか?

ありがとう!

更新:Grid-Viewのデータバインディングは次のとおりです。

Public Sub DataBind()
Dim clsDatabase As New clsDatabase
Dim cmd As New OleDbCommand()
Try
 cmd.CommandText = "SELECT A, B FROM WHERE C = ? ORDER BY A"
   Dim report As New OleDbParameter("@Report", _intReportNumber)
   cmd.Parameters.Add(report)

   cmd.Connection = clsDatabase.Open_DB()
   Dim dReader As OleDbDataReader
   dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

   Dim dt As New DataTable
   dt.Columns.Add(New DataColumn("PictureURL", GetType(String)))
   dt.Columns.Add(New DataColumn("Seq", GetType(Int16)))
   dt.Columns.Add(New DataColumn("ReportNumber", GetType(String)))

   Do While (dReader.Read())
      Dim dr As DataRow = dt.NewRow()

      _strComments = dReader(0).ToString
      dr("Seq") = dReader.GetInt16(1)
      dr("PictureURL") = "GetImages.aspx?report=" + _intReportNumber.ToString + "&seq=" + dReader.GetInt16(1).ToString
      dr("ReportNumber") = _intReportNumber.ToString
      dt.Rows.Add(dr)
   Loop

   GridView1.DataSource = dt
   GridView1.DataBind()

  Catch err As Exception
 End Try
End Sub

ここに画像の説明を入力してください

したがって、基本的に、GridViewには、コメントフィールド、画像フィールド、およびデータベースから画像(および存在する場合はコメント)を削除するための削除ボタン(画像)のあるフィールドの3つの表示列があります。4番目の列は非表示の列で、画像の画像IDを追跡します。わかりやすくするために、写真やその他の列は含めませんでした。

  • ユーザーはコメントを追加でき、[変更を保存]ボタンをクリックすると、対応するコメントが画像に保存されます。
  • 'SELECT IMAGE'は、ユーザーが画像を選択できるようにするModalDialogBoxを開きます。閉じると、ポストバックが発生し、グリッドビューが再バインドされて、ユーザーが選択したばかりの画像が表示されます。したがって、ポストバックで再バインドするためのGridView、またはこれを回避する方法が必要です。
  • ( gridviewの画像の削除ボタンは、データベースから画像とコメントを削除する必要があります。

再度、感謝します!

4

1 に答える 1

1

この構造を試してください...

aspxページ:(注textareaがありますrunat="server"

<body>
    <form runat="server">
    <asp:ScriptManager runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCommand="GridView1_RowCommand"
                EnableViewState="true" OnRowDataBound="GridView1_RowDataBound">
                <Columns>
                    <asp:TemplateField HeaderText="Delete" ItemStyle-HorizontalAlign="Center">
                        <ItemTemplate>
                            <asp:Button runat="server" ID="Delete" Text="Delete" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Comment" ItemStyle-Width="175px">
                        <ItemTemplate>
                            <textarea runat="server" class="raTextBox" id="txtItemComment" rows="4" cols="30"></textarea></ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>

aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindGrid();
    }
}

protected void BindGrid()
{
    var items = new List<string>();
    for (int i = 0; i < 10; i++)
    {
        items.Add(i + ";comment" + i.ToString());
    }
    GridView1.DataSource = items;
    GridView1.DataBind();
}

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "DeleteRow")
    {
        var idx = Convert.ToInt32(e.CommandArgument);
        var cmt = GridView1.Rows[idx].FindControl("txtItemComment") as System.Web.UI.HtmlControls.HtmlTextArea;
        cmt.Value = DateTime.Now.ToString();
    }
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var item = e.Row.DataItem.ToString().Split(";".ToCharArray());

        var del = e.Row.FindControl("Delete") as Button;
        del.CommandName = "DeleteRow";
        del.CommandArgument = item[0];

        var cmt = e.Row.FindControl("txtItemComment") as System.Web.UI.HtmlControls.HtmlTextArea;
        cmt.Value = item[1];
    }
}

次に3つのボタンをクリックしました

于 2012-06-02T04:52:59.043 に答える