0

私の検索ボタンは、すべての行に編集ボタンがある GridvieW にリンクされています。検索ボタンを押すと、データが変更され、databind() が発生します。その後、編集ボタンを使用しようとすると、選択した行ではなく、編集する別の行が表示されます(最大の問題)。両方のボタンは、別々にテストするとうまく機能しますが、次々には機能しません。編集ボタンイベントから削除することを解決しGridView1.DataBind()ましたが、編集テンプレートを表示するには2回のクリックが必要になります(別の問題)。

編集:問題は検索ボタンにあると思います。sqldatasource に依存しない良い検索コードを教えてください。

'Where data is loaded into GV
Dim SqlDataSource1 As New SqlDataSource

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    SqlDataSource1.SelectCommand = "SELECT * FROM [TABLE]"
    SqlDataSource1.ConnectionString = "Conn String"

    If Not IsPostBack Then   

        Dim conn As New SqlConnection
    conn.ConnectionString = con.GetConnectionString
    Dim cmd As New SqlCommand()
    cmd.CommandText = "SELECT [AREA], [LEADER_USER] FROM [AREA]"
    cmd.CommandType = CommandType.Text
    cmd.Connection = conn
    conn.Open()
    Dim adpt As New SqlDataAdapter(cmd)
    Dim ds As New DataSet()
    adpt.Fill(ds)
    GridView1.DataSource = ds
    GridView1.DataBind()
    conn.Close()
    End If

End Sub

'Search button
Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click

    Try
        SqlDataSource1.SelectCommand = "SELECT * FROM TABLE WHERE id LIKE @id"
        SqlDataSource1.SelectParameters.Clear()
        SqlDataSource1.SelectParameters.Add(New Parameter("id", DbType.String, "%" + txtSearch.Text + "%"))
        GridView1.DataSource = SqlDataSource1
        GridView1.DataBind()
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

End Sub

'Edit button
Protected Sub EditRow(ByVal sender As Object, ByVal e As GridViewEditEventArgs)

    GridView1.EditIndex = e.NewEditIndex
    GridView1.DataSource = SqlDataSource1
    GridView1.DataBind()

End Sub

マークアップ:

<asp:TextBox ID="TextBox1" runat="server" BackColor="#D9ECFF" 
                                        style="height: 20px; width: 186px" AutoPostBack="True"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" BackColor="#0066cc" 
                                        BorderColor="#0066cc" BorderStyle="Outset" Font-Bold="True" ForeColor="White" 
                                        style=" height: 26px; width: 56px" Text="Search"  />

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
AutoGenerateColumns="False" CellPadding="4" OnRowEditing="EditRow" 
OnRowCancelingEdit="CancelEditRow" DataKeyNames="AREA" DataMember="DefaultView">

  <Columns>
     <asp:BoundField DataField="AREA" HeaderText="AREA" ReadOnly="True" 
                                        SortExpression="AREA" />                                   

      <asp:TemplateField HeaderText="LEADER_USER" SortExpression="LEADER_USER">
                     <ItemTemplate><%#Eval("leader_user")%></ItemTemplate>
                      <EditItemTemplate>
                          <asp:TextBox ID="txtleaderuser" runat="server" Text='<%#Eval("leader_user")%>'/>
                      </EditItemTemplate>
       </asp:TemplateField>

       <asp:TemplateField>                                    
           <ItemTemplate>
                  <asp:ImageButton ID="editButton" runat="server" CommandName="Edit" 
                                                ImageUrl="images/pencil1.png" Text="Edit" ToolTip="Edit" />
            </ItemTemplate>
             <EditItemTemplate>
                   <asp:Button ID="BtnUpdate" runat="server" CommandName="Update" 
                                                Text="Update" />
                   <asp:Button ID="BtnCancel" runat="server" CommandName="Cancel" 
                                                Text="Cancel" />
              </EditItemTemplate>
             </asp:TemplateField>

      </Columns>
    </asp:GridView>

私を助けてください。これら 2 つの gridview 機能は、どのようにコーディングして連携させるべきですか? これが私がこれを行う方法を知っている唯一の方法ですが、うまくいくならどんなアイデアでも構いません。あなたがC#の人なら、C#からVBへのコンバーターを使うことができます: http://www.developerfusion.com/tools/convert/csharp-to-vb/

4

2 に答える 2