我的搜索按鈕鏈接到一個GridvieW,它在每一行都有一個編輯按鈕。當我按下搜索按鈕時,數據發生變化並出現一個數據綁定()。 之後,如果我嘗試使用編輯按鈕,它會顯示另一行進行編輯,而不是選定的那一行(最大的問題)。兩個按鈕在單獨測試時工作良好,但不是一個接一個地測試。我解決了從編輯按鈕事件中刪除GridView1.DataBind()
,但然後它需要2次點擊來顯示編輯模板(另一個問題)。Gridview:搜索後編輯
編輯:我猜問題是在搜索按鈕。你能給出一個不依賴於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#的傢伙,你CA使用C#-to VB轉換器: http://www.developerfusion.com/tools/convert/csharp-to-vb/
你是如此接近使用ADO.NET(的SqlCommand,SqlConnection的,等等),爲什麼不走一路和擺脫的SqlDataSource的?我認爲你編輯中發生的事情是,你在搜索中對SqlDataSource所做的更改不會持久。 「SqlDataSource1」的標記是什麼樣的? –
不好意思,我不知道如何在沒有SQldatasource的情況下做到這一點,如果你能告訴我它會很棒。並且沒有針對SqlDataSource1的asp代碼,它可以在後面的代碼中聲明,如您所見。 – phalanx
顯示您的GridView標記也 –