Datagrid rowcommand показывает неверное значение после моего результата поиска
Всем привет,
Мой проект кажется простым. Моя форма заполняет datagrid при загрузке (из базы данных)
У меня есть кнопка поиска, которая работает, и теперь я могу фильтровать результаты.
У меня также есть onRowCommand, который на данный момент просто показывает детали выбранной строки.
Тем не менее, при загрузке страницы, кажется, все в порядке, я могу проверить детали без проблем. Но, когда я делаю поиск. это показывает мне другую ценность.
например.
Хината [Показать]
Сакура [Показать]
Тентен [Показать]
если поиск "n"
в результате получается
Хината [Показать]
Тентен [Показать]
но когда я нажимаю вид Тентен - он показывает сакуру :(
моя форма
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Me.IsPostBack Then Me.BindGrid("") End If End Sub
Hello Again, I kinda cleaned my code a bit. I also used a viewstate.. but I still get the error. <pre lang="vb"> Protected Sub lnkSearch_Click(sender As Object, e As EventArgs) Handles lnkSearch.Click Dim strSearch As String strSearch = "SELECT Fid,RealName,Department FROM tblUsers" & " WHERE RealName LIKE '%" & txtName.Text & "%'" Dim constring As String = "Data Source=LOCALHOST\SQLEXPRESS;Initial Catalog=dbTOD_Sql;Integrated Security=True" Using con As New SqlConnection(constring) Using cmd As New SqlCommand(strSearch, con) cmd.CommandType = CommandType.Text Using sda As New SqlDataAdapter(cmd) Using dt As New DataTable() sda.Fill(dt) 'Set AutoGenerateColumns False GridView1.AutoGenerateColumns = False 'First time knowing ViewState. HOpe this works ViewState("vsTable") = dt 'Reading the viewstate values. Dim dt2 As DataTable = DirectCast(ViewState("vsTable"), DataTable) GridView1.DataSource = dt2 GridView1.DataBind() End Using End Using End Using End Using End Sub </pre>
Защищенный Sub GridView1_RowCommand(отправитель как объект, e Как GridViewCommandEventArgs)
Дим параметр rowindex как integer = конвертировать.ToInt32(e. CommandArgument)
Dim row As GridViewRow = GridView1. Rows(rowIndex)
- Доступ к значениям ячеек.
Dim customerId As Integer = целое число.Parse(row. Cells(0). Text)
Тусклое имя как строка = строка.Ячейки (1). Текст
MsgBox (имя) 'только для тестирования
Конец Подводной Лодки
Что я уже пробовал:
Отредактировано: я попробовал Viewstate, как было предложено, но все равно получаю ошибку.
Я попробовал selectedIndexChange, но все равно получаю те же результаты. Я сделал перезагрузку компьютера, надеясь, что это просто ошибка и обновление устранит проблему.
Я заблудился. Я больше не знаю, что делать.
Richard Deeming
strSelectCmd = "SELECT Fid,Realname,,Department,Email FROM tblPerson" & " WHERE Department = '" & SelectedGroup & "'"
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Вы уже знаете, как использовать параметры-вы сделали все правильно. lnkSearch_Click
. :)
Cute Girly Geek
Извините, что я вставил не тот lnkSearch_Click.. Это похоже на процедуру BindGrid (), но с str = " Select * FROM tblUsers WHERE Username LIKE '%" & txtName.txt &"%'"
Кстати, я обещаю быть хорошей девочкой и буду изучать и реализовывать параметризованный запрос после того, как получу все необходимые мне функции. После этого будет очищен код. Спасибо снова :)
Richard Deeming
Починка SQLi довольно проста:Const strSearch As String = "SELECT Fid,RealName,Department FROM tblUsers WHERE RealName LIKE '%' + @Name + '%'"
...
Using cmd As New SqlCommand(strSearch, con)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@Name", txtName.Text)
...
Нет необходимости хранить результаты в памяти. ViewState
- этот GridView
я уже позаботился об этом для тебя.
Что делает .aspx
разметка выглядит как для сетки?
Cute Girly Geek
Спасибо, Мистер Ричард.. Извините за поздний ответ... это дизайн моей формы... Я думаю, что виноват.. Я старался все делать в одной форме. (Нилеш савардекар был прав).. Поэтому я просто создал новую форму для своего поиска,и она работала. Хотя мне бы очень хотелось получить пример viewstate. Спасибо снова. :)
Cute Girly Geek
Спасибо, Мистер Ричард.. Извините за поздний ответ... это дизайн моей формы... Я думаю, что виноват.. Я старался все делать в одной форме. (Нилеш савардекар был прав).. Поэтому я просто создал новую форму для своего поиска,и она работала. Хотя мне бы очень хотелось получить пример viewstate. Спасибо снова. :)
Richard Deeming
Вы уверены, что код, который Вы нам показали, дает вам результаты, которые вы показали?
Запрос в lnkSearch_Click
не будет фильтровать сетку и не похоже, что она будет соответствовать двум записям, которые вы показали.