表中的ASP.NET可见/不可见行(C#)

时间:2016-04-22 08:43:02

标签: c# asp.net .net tablerow tablecell

我有一个 System.Web.UI.WebControls.Table ,其中有五个ROW,其中五个单元格带有服务器控件。在我的“Page_load”=> CreateChildControls()只有Row1可见,其他行是不可见的。

我希望点击btnAdd_Click的地方逐行添加到我的表中,然后点击btnDell_Click删除我表格中的最后一行...如何执行此操作?

这是我在PageLoad中的用户界面:

enter image description here

点击BtnAdd时,这是我的界面:

enter image description here

这是我的按钮代码,但不是workig:

        void btnAdd_Click(object sender, EventArgs e)
    {

        if (tRow1.Visible)
        {
            tRow2.Visible = true;
            tRow3.Visible = false;
            tRow4.Visible = false;
            tRow5.Visible = false;
        }

        if (tRow1.Visible && tRow2.Visible && !tRow3.Visible)
        {
            tRow3.Visible = true;
            tRow4.Visible = false;
            tRow5.Visible = false;
        }

    }

    void btnDell_Click(object sender, EventArgs e)
    {

    }

4 个答案:

答案 0 :(得分:1)

虽然它实际上并没有在后端删除和添加(你总是有一个5行表)。

DataRow[] rows = new DataRow[]{tRow1, tRow2.....};//im not sure how you refferenced them;
void btnAdd_Click(object sender, EventArgs e)
{
  foreach(DataRow dr in rows)
  {
     if(!dr.Visible)
     {
        dr.Visible = true;
        return;
     }
  }
}

void btnAdd_Click(object sender, EventArgs e)
{
  foreach(DataRow dr in rows.Reverse())
  {
     if(dr.Visible)
     {
        dr.Visible = false;
        return;
     }
  }
}

那样的东西?

答案 1 :(得分:1)

更好的方法是动态添加行。对于您的问题,您可以尝试简化您的问题,如果"通过使用foreach语句来改变btnAdd_Click中的条件。 (假设您的表ID为"表1和#34;)。

        foreach (TableRow row in Table1.Rows.Cast<TableRow>().Where(row => !row.Visible))
        {
            row.Visible = true;
            return;
        }

对于您的删除,请尝试使用以下代码,如果有效,下面的代码将搜索最后一个可见行并使其属性为false以隐藏它。

        if (Table1.Rows.Cast<TableRow>().Count(row => row.Visible) > 1)
        {
            Table1.Rows.Cast<TableRow>().Last(row => row.Visible).Visible = false;
        }

关于如何清除文本框的下一个问题,您可以像检索每个值一样访问每个单元格文本框,而不是获取清除值所需的值。

或者简单地迭代每个单元格中的每个控件并获取每个单元格的所有文本框。一旦你掌握了控制权,你就可以做任何你想做的事。为此,您可以使用typeOf(TextBox)在每个单元格中搜索控件。

首先将表行放在if条件中的变量中,替换代码以隐藏行。:

var tableRow = Table1.Rows.Cast<TableRow>().Last(row => row.Visible);

然后你可以在每个单元格中进行另一个foreach循环以访问单元格:

foreach (TableCell item in tableRow.Cells)
{
     foreach (Control cntrl in item.Controls.Cast<Control>().Where(cntrl => cntrl.GetType() == typeof (TextBox)))
      {
           ((TextBox) cntrl).Text = string.Empty;
      }
}
tableRow.Visible = false; //Dont forget to hide the row before you exit

如果有效,你可以尝试上面。如果有效,你可以通过将2 foreach函数组合成单个foreach循环来简化foreach ..这将是你的任务。学习如何使用linq,我很确定你会喜欢它: - )

答案 2 :(得分:0)

void btnAdd_Click(object sender, EventArgs e)
    {

        if (tRow1.Visible && !tRow2.Visible)
        {           
            tRow2.Visible = true;
            return;
        }
        else if (tRow1.Visible && tRow2.Visible && !tRow3.Visible)
        {
            tRow3.Visible = true;
            return;
        }

        else if (tRow1.Visible && tRow2.Visible && tRow3.Visible && !tRow4.Visible)
        {
            tRow4.Visible = true;
            return;
        }

        else if (tRow1.Visible && tRow2.Visible && tRow3.Visible && tRow4.Visible && !tRow5.Visible)
        {
            tRow5.Visible = true;
            return;
        }
    }

有了这个工作:)如何用btnDell删除最后一个可见行?使用foreach或?

答案 3 :(得分:0)

这个更短但我不知道它是否适合你。

void btnAdd_Click(object sender, EventArgs e)
{
   i=1       
        while ( i<5 )      
            {
              if (tRow[i].Visible & !tRow[i+1].Visible)        
                  {
                      tRow[i+1].Visible = true;
                      Break;
                  }
              else
                 i++;
            }
}