【问题标题】:ASP.NET - Hide and Show Griview Column ConditionallyASP.NET - 有条件地隐藏和显示 Gridview 列
【发布时间】:2015-03-16 04:06:52
【问题描述】:

我有一个gridview,应该在选择一个搜索选项中的一个条件时隐藏某些列。否则,应查看该列。

我已经使用此代码隐藏了一个列:

grdMarketingReport1.Columns[2].Visible = false;

但是当我搜索另一个应该显示该列的条件时,它不再显示。注意gridview属性Autogeneratecolumn设置为false

更新

按钮点击事件

  if ((txtHiddenLoc.Text == "ALL") && (txtHiddenBus.Text == "ALL"))
                        {
                            executeQuery();
                            grdMarketingReport1.Columns[2].Visible = true;
                        }


else if (((txtHiddenLoc.Text == "ALL") && (txtHiddenBus.Text != "ALL")) 

                        {
                            executeQuery();
                            grdMarketingReport1.Columns[2].Visible = false;

                        }

..

public void executeQuery()
{

    SqlCommand cmd = new SqlCommand("spMarketingReport1", con);
    cmd.CommandTimeout = 120;
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@RP", txtHiddenRP.Text);
    cmd.Parameters.AddWithValue("@Location", txtHiddenLoc.Text);
    cmd.Parameters.AddWithValue("@DateFrom1", txtdatefrom1.Text);
    cmd.Parameters.AddWithValue("@DateTo1", txtdateto1.Text);

    try
    {
        con.Open();
        grdMarketingReport1.EmptyDataText = "No Records Found";
        grdMarketingReport1.DataSource = cmd.ExecuteReader();
        grdMarketingReport1.DataBind();

    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        con.Close();
        con.Dispose();
    }

它正确地隐藏了该列,但是当另一个条件适用于查看该列时,该列上的数据/值将被清空。

【问题讨论】:

  • 你在哪里设置这个?按钮点击?页面加载?您是否重置了积极条件的可见性?
  • 这是按钮点击
  • 在页面加载中是否调用了executeQuery()?如果是这样,它会在if (!Page.isPostBack) 中调用吗?还有什么时候txtHiddenLoc.Text != "ALL"
  • 不,它们不在页面加载中。我决定不放整个代码,因为它可能无关紧要,只是让问题更长。 txthiddenLoc 实际上是一个隐藏字段,每当用户在 modalpopup 中选择 ALL 选项时,系统都会在 txthiddenloc 以及 txtHiddenBus 中放置一个值 ALL

标签: c# asp.net sql-server gridview


【解决方案1】:

您可以在 Grid 的 RowDataBound 事件上执行此操作

Protected Sub grdMarketingReport1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles grdMarketingReport1.RowDataBound

    If e.Row.RowType = DataControlRowType.Header Then
        If Checkbox.Checked = True Then
            e.Row.Cells(2).Style("display") = "none"
        End IF
    End IF

    If e.Row.RowType = DataControlRowType.DataRow Then
        If Checkbox.Checked = True Then
            e.Row.Cells(2).Style("display") = "none"
        End IF
    End IF

End Sub

【讨论】:

  • 我实际上已经这样做了,但无论我的情况如何,它都会隐藏该列
  • 您也可以在 Gridview HeaderRow 和 DataRow 上设置条件。检查代码。希望它可以帮助你。
  • 是的,这应该会有所帮助。或者使用 Eval 和 Binder.Expression 使用内联条件
【解决方案2】:

我会使用您的搜索条件设置您列的可见性。也可以尝试重新排序。

bool displayCol = ((txtHiddenLoc.Text == "ALL") && (txtHiddenBus.Text == "ALL"));
executeQuery();
grdMarketingReport1.Columns[2].Visible = dispalyCol;

如果这不起作用,请尝试在网格视图的DataBoundPre-Render 事件中隐藏和显示列。

【讨论】:

  • 这确实隐藏并显示了该列,但是在再次查看该列后,该列上的值变为空
【解决方案3】:

我想我找到了最简单的答案,只需将这个显示和隐藏代码放在 gridview 的数据绑定之前。就像这样:

**grdMarketingReport1.Columns[2].Visible = true;
  grdMarketingReport1.DataBind();**

并将条件放在 executeQuery() 内的 TRY 子句中

    try
    {
        con.Open();

        if ((txtHiddenBus.Text == "NONE") && (txtHiddenRP.Text == "NONE"))
        {
            grdMarketingReport1.EmptyDataText = "No Records Found";
            grdMarketingReport1.DataSource = cmd.ExecuteReader();
            grdMarketingReport1.Columns[1].Visible = false;
            grdMarketingReport1.Columns[2].Visible = false;
            grdMarketingReport1.Columns[3].Visible = false;
            grdMarketingReport1.Columns[4].Visible = false;
            grdMarketingReport1.Columns[5].Visible = false;
            grdMarketingReport1.Columns[6].Visible = false;
            grdMarketingReport1.DataBind();
        }

        else if ((txtHiddenBus.Text != "NONE") && (txtHiddenRP.Text == "NONE"))
        {
            grdMarketingReport1.EmptyDataText = "No Records Found";
            grdMarketingReport1.DataSource = cmd.ExecuteReader();
            grdMarketingReport1.Columns[1].Visible = false;
            grdMarketingReport1.Columns[2].Visible = false;

            grdMarketingReport1.Columns[4].Visible = false;
            grdMarketingReport1.Columns[5].Visible = false;
            grdMarketingReport1.Columns[6].Visible = false;
            grdMarketingReport1.DataBind();
        }

        else
        {
            grdMarketingReport1.EmptyDataText = "No Records Found";
            grdMarketingReport1.DataSource = cmd.ExecuteReader();
            grdMarketingReport1.Columns[1].Visible = true;
            grdMarketingReport1.Columns[2].Visible = true;
            grdMarketingReport1.Columns[3].Visible = true;
            grdMarketingReport1.Columns[4].Visible = true;
            grdMarketingReport1.Columns[5].Visible = true;
            grdMarketingReport1.Columns[6].Visible = true;
            grdMarketingReport1.DataBind();
        }



    }

【讨论】:

    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 2013-12-18
    • 2014-09-09
    • 2014-04-18
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多