【问题标题】:Panel is Invisible but children are databinding面板是不可见的,但孩子是数据绑定
【发布时间】:2017-07-25 22:40:43
【问题描述】:

我在 ASP.NET 控件中有面板。当它不可见时,Panel 中的所有GridViews 都是数据绑定。当Panel 不可见时,我不希望他们这样做。提出了以下solution。这是Placeholders 的一个很好的解决方案,我已经尝试为Panels 实现它

public class NewPanel : Panel
{
    protected override void DataBindChildren()
    {
        if (visible)
        {
            base.DataBindChildren();
        }
    }
}

我的问题是我现在如何在 .aspx 页面的标记中使用 NewPanel 类? 或者有没有办法在代码中动态覆盖Panel中的方法,并在标记中继续使用Panel

这是aspx代码的一部分

<asp:GridView ID="AssignedGV" runat="server" AutoGenerateColumns="False" DataKeyNames="OrderID" DataSourceID="AssignedDS" Width="100%">
      <Columns>
           <asp:TemplateField HeaderText="Created" SortExpression="DateOrderCreated">
                  <ItemTemplate>
                       <asp:Label ID="Label1" runat="server" Text='<%# Bind("DateOrderCreated", "{0:d-MMM-yyyy}") %>'></asp:Label>
                  </ItemTemplate>

<asp:SqlDataSource ID="AssignedDS" runat="server" ConnectionString="<%$ ConnectionStrings:XXXXXXX %>" SelectCommand="SELECT TOP (100) PERCENT T_Orders.OrderID, XXXXXXXXXXXXXXXXX OrderQuoteVersion.RequestApprovalOfEmployeeID, T_Orders.JobNumber FROM XXXXXXX AS T_OrderQuoteVersion RIGHT OUTER JOIN XXXXX AS T_Orders INNER JOIN XXXXXXX ON T_Orders.CustomerID = T_Customers.CustomerID ON T_OrderQuoteVersion.OrderID = T_Orders.OrderID  "></asp:SqlDataSource>

此代码在 Panel 内,无论 Panel 是否不可见都会被数据绑定

【问题讨论】:

  • 您目前的数据绑定情况如何?您是使用 SQLDataSource 控件还是使用 C# 代码隐藏页面?您能否还包括您当前的相关 ASPX 标记?
  • 我已经包含了相关代码。是的,我正在使用 SqlDataSource 控件。

标签: c# asp.net data-binding overriding


【解决方案1】:

我通常在后面的代码中进行数据绑定,我将在这里使用这种方法,因为我发现它可以为您提供更多控制权。我有兴趣查看任何维持使用 SQLDataSource 控件的答案。

您需要对您的 aspx 进行的唯一更改是删除 SQLDataSource 控件。

在你后面的代码中,你会想要类似的东西

//Put this in PageLoad or Load, what ever suits you best
//The IsPostBack check is optional....remove it if that fits tour needs better
if(!IsPostBack)
{
    //Use the Appropriate Panel ID below
    if(PanelID.Visible)
    {
        string constring = "Your Connection String";
        using (SqlConnection con = new SqlConnection(constring))
        {
            using (SqlCommand cmd = new SqlCommand("YOUR SQL QUERY", con))
            {
                cmd.CommandType = CommandType.Text;
                using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
               {
                    using (DataTable dt = new DataTable())
                    {
                        sda.Fill(dt);
                        AssignedGV.DataSource = dt;
                        AssignedGV.DataBind();
                    }
               }
            }
         }
    }
}

注意我没有测试过代码,它可能有错别字或其他愚蠢的错误,但它应该足以让你朝着正确的方向前进。

【讨论】:

  • 尽管您的解决方案很好并且有效,但我将继续使用 SqlDataSource 解决方案,因为我正在编辑大量已经编写的代码。感谢您的宝贵时间。
  • 如果您在其他地方找到解决方案,请务必在此处发布,以便我们都能从您的成功中受益。如果你找到答案,接受你自己的答案并没有错。
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2011-01-03
  • 2011-07-30
  • 1970-01-01
  • 2014-01-15
  • 2021-10-30
相关资源
最近更新 更多