none
如何删除ListView中的行 RRS feed

  • 问题

  • 我想在ListView中,根据条件删除ListView中的某一行。必需要循环ListView来进行删除,不能从填充ListView的数据中删除数据再重新绑定到ListView.因为这个ListView中的其中几列是根据ListView绑定后再从其它的地方获取的。我想用以下循环ListView的方法把不符合条件的行删除。请问我该如何做,下面的方法无法删除行,因为无法选择循环到当前的行。

          foreach (ListViewItem lv in ListView1.Items)
          {
            Label LabelDate = (Label)lv.FindControl("LabelDate");
            if (LabelDate != null)
            {
              if (Convert.ToDateTime(LabelDate.Text.Trim()).Year.ToString().Trim() != SelectYear)
              {
                if (SelectYear != "-1")
                {
                  if (ListView1.SelectedIndex >= 0)
                    ListView1.DeleteItem(ListView1.SelectedIndex);
                }
              }
    
              if (Convert.ToDateTime(LabelDate.Text.Trim()).Month.ToString().Trim() != SelectMonth)
              {
                if (SelectMonth != "-1")
                {
                }
              }
            }
          }
    
    

     

    2011年6月10日 9:57

答案

  • 我明白你的意思——你的意思是一旦删除了行,那么ListView整个行的索引结构发生变化了,以后删除就可能出现出错或者遗漏?

    尝试这样做:)

    int totalIndex = 0;

    for ( int i=0;i<ListView1.Items.Count;++i)

          {
            Label LabelDate = (Label)ListView1.Items[i].FindControl("LabelDate");
            if (LabelDate != null)
            {
              if (Convert.ToDateTime(LabelDate.Text.Trim()).Year.ToString().Trim() != SelectYear)
              {
                if (SelectYear != "-1")
                {
                  if (ListView1.SelectedIndex >= 0)
                    ListView1.DeleteItem(ListView1.SelectedIndex);
                    --i;每次成功删除一行之后,i自减1.往后退一行。

                }
              }

    ………………

     


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 cycc 2011年6月14日 1:40
    2011年6月12日 2:32

全部回复

  • 我明白你的意思——你的意思是一旦删除了行,那么ListView整个行的索引结构发生变化了,以后删除就可能出现出错或者遗漏?

    尝试这样做:)

    int totalIndex = 0;

    for ( int i=0;i<ListView1.Items.Count;++i)

          {
            Label LabelDate = (Label)ListView1.Items[i].FindControl("LabelDate");
            if (LabelDate != null)
            {
              if (Convert.ToDateTime(LabelDate.Text.Trim()).Year.ToString().Trim() != SelectYear)
              {
                if (SelectYear != "-1")
                {
                  if (ListView1.SelectedIndex >= 0)
                    ListView1.DeleteItem(ListView1.SelectedIndex);
                    --i;每次成功删除一行之后,i自减1.往后退一行。

                }
              }

    ………………

     


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 cycc 2011年6月14日 1:40
    2011年6月12日 2:32
  • 这样写肯定不对,删除之后肯定刷新,index一定会改变,并且看你写的是根据日期删除的,跟选中有什么关系
    2011年6月14日 3:06
    版主