manju 3 Ответов: 4

Удалите скрытые строки из представления datagridview.


Hi Team,
I am trying to filter the DataGridView rows  based on the given startdate and enddate.
So i am making the rows visible if the date(GridDate) is within the startdate and enddate and making that rows visible in the Grid.
How can i remove/delete the hidden rows from the Grid .i.e if(Visible = false)

Any help will be apprciated.Below is the code I tried


заранее спасибо
Шаран

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

startDate = "2/25/2015"
endDate   = "2/25/2015"
if (startDate <= endDate)// runs foreach loop if startdate and enddate are valid
{
    foreach (DataGridViewRow dr in Grid.Rows)// loops through rows of datagridview
    {
          string deadline = dr.Cells["GridDate"].Value.ToString(); // gets deadline values
          DateTime deadlineRow = Convert.ToDateTime(deadline); // converts deadline string to datetime and stores in deadlineRow variable
          if (startSchedule <= deadlineRow && deadlineRow <= endSchedule) // filters deadlines that are => startDate and <= endDate
          {
              dr.Visible = true; // display filtered rows here.
          }
          else
          {             
             dr.Visible = false; // hide rows that are not beteen start and end date.
             
          }
    }
}

4 Ответов

Рейтинг:
2

CHill60

Как вы уже упоминали, DataGridView я предложу решение c# Winforms.

Первый пункт - если вы используете даты, то используйте DateTime переменная не является строкой. Вы не указали никакого форматирования на .ToString() и у вас есть неоднозначный формат для ваших startDate и endDate, так что просто используйте правильный тип.

Второй момент - всегда гораздо лучше фильтровать данные до вы помещаете его в DataGridView, например, используя предложение WHERE в SQL.

Однако это решение предполагает, что вы уже заполнили DataGridView и хотите удалить из него элементы на основе столбца "griddate".

var startDate = new DateTime(2017,2,25,0,0,0);
var endDate = new DateTime(2017, 2, 25, 0, 0, 0);

for (var i = dataGridView1.Rows.Count - 1; i >= 0; i--)
{
        if (dataGridView1.Rows[i].Cells["griddate"].Value == null) continue;
        var griddate = DateTime.Parse(dataGridView1.Rows[i].Cells["griddate"].Value.ToString());
        if (griddate < startDate || griddate > endDate)
                dataGridView1.Rows.RemoveAt(i);
}
Обратите внимание, что я начинаю с конец из коллекции строк и работайте в обратном направлении. Представьте, что у меня есть строки с индексами 1, 2, 3, 4 ... Если я начну с самого начала и удалю строку 2, то строка 4 больше не будет существовать, у меня будут индексы строк 1, 2, 3. Но, начав с другого конца, я уже рассмотрю строку 4, так что мне все равно, будет ли она перенумерована.

Если у вас были строки, сделанные невидимыми в другом месте кода, то удалить их еще проще :
for (var i = dataGridView1.Rows.Count - 1; i >= 0; i--)
{
    if (!dataGridView1.Rows[i].Visible)
        dataGridView1.Rows.RemoveAt(i);
}


Рейтинг:
1

Harshal Kale

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
     HyperLink hl = (HyperLink) e.row.FindControl("HyperLink1");
       if (hl.Text == "Name1.db")
       {
       e.Row.Visible=false;
       }
    }
}


Рейтинг:
0

Arvind Zamakia

<asp:TemplateField AccessibleHeaderText="GridDate">
                                            <HeaderTemplate>
                                              GridDate
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <%# Eval("LastName")%>
                                            </ItemTemplate>
                                        </asp:TemplateField>
										
										
Use AccessibleHeaderText to find index of this  column then

  Grid.Columns(2).Visible = False


Рейтинг:
0

GrpSMK

dataGridView1.CurrentCell = null;

dataGridView1.Rows[row].Visible = false;


manju 3

Спасибо за ответ.
Попробовал сделать это.Но все равно строки скрываются, но не удаляются.