Как получить индекс строки, чтобы я мог покрасить ячейки - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть вид сетки, который содержит некоторые порядковые номера.Каждый столбец должен иметь уникальную числовую последовательность.Он доступен для редактирования, и если пользовательский номер, который уже находится в этом конкретном столбце, ячейки окрашены в красный цвет.

Пока я окрашиваю только вторую ячейку из 2 неправильных ячеек (с одинаковыми значениями).Как я могу покрасить обе клетки.Насколько я знаю, мне нужно также использовать индекс строки, но я понятия не имею, как ..

Вот код

            //colum2
            string sValue2 = e.Row.Cells[4].Text;

            if (Values2.Contains(sValue2))
            {
                // This value is a duplicate - color red
                e.Row.Cells[4].BackColor = System.Drawing.Color.Red;
                 //Response.Write("Warning... Error in pad no: " +e.Row.Cells[2].Text+ " dupliated value: " +e.Row.Cells[3].Text);


            }
            else
            {
                Values2.Add(sValue2);
            }

и то же самое для всех 8 столбцов

Надеюсь, это понятно.Большое спасибо заранее

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Если я правильно понял ваш вопрос, вы хотели бы найти RowIndex для строки, которая уже содержит те же данные в той же ячейке, и изменить ее цвет на красный.

Вы можете написать метод для изменения цвета каждой ячейки на красный, который содержит эти данные. Что-то вроде:

void colorCells(GridView GV, int CellIndex, string Text)
{
    foreach(GridViewRow row in GV.Rows)
    {
        if(row.Cells[CellIndex].Text == Text)
            row.Cells[CellIndex].BackColor = System.Drawing.Color.Red;
        //might use else to set to default color
    }
}

И тогда вы можете использовать вот так:

    //colum2
    string sValue2 = e.Row.Cells[4].Text;
        if (Values2.Contains(sValue2))
        {
            // This value is a duplicate - color red
            colorCells(/* Get the reference for the grid view, e.g.: gridView1*/, 4, sValue2); 
        }
        else
        {
            Values2.Add(sValue2);
        }
2 голосов
/ 18 ноября 2011

Ваш вопрос был не очень понятен, но я постараюсь помочь и ответить из того, что я понял.

Существуют разные способы получения индекса строки.

Это зависит от того, какое событие элемента управления GridView, ваша кодовая логика должна быть выполнена:

  • _RowDataBound: e.Row.RowIndex
  • _RowCommand: ((Control)e.CommandSource).NamingContainer as GridViewRow.RowIndex
  • _RowEditing: e.NewEditIndex
  • _RowUpdating, _RowDeleting и _RowCancelingEdit: e.RowIndex

Надеюсь, это поможет.

Пример кода:

private bool IsCellToHighlight(GridViewCell cell)
{
bool highlightCell = false;
// Put your cell checking condition
// Example ..
highlightCell = (string.Compare(cell.Text, "Check Value", true) == 0);
return highlightCell;
}

private void HighlightCells(GridViewRow row)
{
for(int c=0; r<row.Cells.Count; c++)
{
if(this.IsCellToHighlight(row.Cells[c]))
{
// Apply required styling Code
// ..
}
}
}

Еще один способ сделать это - использовать JQuery:

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

Проверьте эти ссылки:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=259

http://www.dotnetfunda.com/articles/article970-aspnet-gridview-jquery-tips-and-tricks-part-1.aspx

http://www.dotnetcurry.com/ShowArticle.aspx?ID=250


Отказ от ответственности: это только один из способов сделать. Хоть и немного грубовато, но и над этим можно строить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...