我在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是否隐身
,都会获得数据表答案 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();
}
}
}
}
}
}
注意我还没有对代码进行测试,可能会出现拼写错误或其他愚蠢的错误,但它应该足以让您朝着正确的方向前进。