小组是不可见的,但儿童是数据绑定

时间:2017-07-25 22:40:43

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

我在ASP.NET控件中有面板。当它不可见时,GridViews中的所有Panel都是数据绑定。当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是否隐身

,都会获得数据表

1 个答案:

答案 0 :(得分: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();
                    }
               }
            }
         }
    }
}

注意我还没有对代码进行测试,可能会出现拼写错误或其他愚蠢的错误,但它应该足以让您朝着正确的方向前进。