Faran Saleem Ответов: 3

Проверьте значение из gridview при нажатии кнопки ASP.NET


Привет,

Надеюсь, что вы все делаете хорошо.
У меня есть вопрос, у меня есть gridview со столбцом с именем "Status", и значение извлекается из базы данных Sql.
За пределами Gridview есть кнопка "Закрыть". Что я хочу сделать, так это когда пользователь нажимает на кнопку, он должен сначала проверить, что все записи в gridview имеют статус = закрыто, даже если есть одна запись со статусом = "ожидание", он должен сгенерировать всплывающее окно с вопросом: "Вы уверены, что хотите закрыть".
Надеюсь, я ясно выразился. С нетерпением жду вашей помощи.

Большое спасибо

Что я уже пробовал:

Поискал в гугле, но ничего похожего найти не смог

3 Ответов

Рейтинг:
5

Vincent Maverick Durano

Еще один краткий пример для вашей справки:

protected void btnClose_Click(object sender, EventArgs e)
{
        //loop through the grid rows
        foreach (GridViewRow row in GridView1.Rows)
        {
               //assuming your are using BoundField column for displaying the Status field
               //change the value of index where your Status field resides in the grid's column
               //index starts at 0
               if(row.Cells[index].Text.Trim().ToLower() == "pending"){
                       ClientScript.RegisterStartupScript(typeOf(this), "alert", "alert('Found pending status.')", true);
                       break;
               } 
        }
}


Чтобы отобразить подтверждение от кода-за, то вы можете обратиться к этому примеру здесь.


Faran Saleem

Спасибо за ответ, но я получаю ошибку здесь.. он говорит ,что "нет перегрузки для метода "RegisterStartupScript" принимает 1 аргумент

Vincent Maverick Durano

где твой код?

Faran Saleem

С некоторыми изменениями в коде, который вы предоставили, я смог получить желаемые результаты.

Спасибо

Vincent Maverick Durano

потрясающе! рад быть полезным. :)

Рейтинг:
23

Peter Leow

Проверьте этот пример кода:

Label cell; // assumming the cell is a Label control
for (int i = 0; i < Gridview1.Rows.Count; i++)
{
    cell = Gridview1.Rows[i].FindControl("Status") as Label;
    if (cell.Text == "pending") return false
}
return true;


Рейтинг:
15

Maciej Los

В противоположность решению №1 по Петр Leow[^], если объект gridview ограничен источником данных, я бы предложил не следовать через сбор ячеек gridview, а через сбор данных GridView в[^] источник данных[^].

Например:

DataSet ds = (DataSet)gridview1.DataSource;
var pendingdata = ds.Tables[0].AsEnumerable()
	.Where(x=>x.Field<string>("Status")=="pending")
	.ToList();
foreach(DataRow r in pendingdata)
{
	//display message here!
}


Для получения более подробной информации, пожалуйста, смотрите:
Класс DataSet (System. Data)[^]
Наборы данных, таблицы данных и представления данных[^]
LINQ to DataSet[^]
Запрос наборов данных (LINQ to DataSet)[^]
Запросы в LINQ to DataSet[^]
Примеры LINQ to DataSet[^]