我有一个DataGrid显示数据库中的值。然后,DataGrid将填充在不同的类文件中。但我在html代码中有一个复选框,检查是否已选中。选中该复选框后,我想从DataGrid加载RevToDate列。所以我收到错误:chkRevToDate不存在。 那么如何在另一个类中调用chkRevToDate复选框?
名为Customer.aspx.cs的文件中的DataGrid代码:
<div runat="server" id="dvMainGrid" class="dvResultsLookup">
<asp:DataGrid runat="server" CssClass="tblResults" OnItemDataBound="dgList_ItemCreated" AllowSorting="true" OnSortCommand="dgCustomer_Sort" ID="dgCustomers" DataKeyField="ID" AutoGenerateColumns="false">
<HeaderStyle CssClass="tblResultsHeader" />
<AlternatingItemStyle BackColor="#EEEEEE" />
<Columns>
<asp:HyperLinkColumn ItemStyle-CssClass="loading" DataNavigateUrlFormatString="Customer.aspx?CustID={0}" DataNavigateUrlField="ID" DataTextField="AccountCode" HeaderText="A/C Code" SortExpression="AccountCode"></asp:HyperLinkColumn>
<asp:BoundColumn DataField="VATNo" HeaderText="VAT No" SortExpression="VATNo"></asp:BoundColumn>
<asp:BoundColumn DataField="CurrencyDesc" HeaderText="Currency" SortExpression="CurrencyDesc"></asp:BoundColumn>
<asp:BoundColumn DataField="RevToDate" HeaderText="Rev To Date (Net)" Visible="false" SortExpression="RevToDate"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
在与DataGrid相同的类中,我有复选框的代码
<asp:CheckBox runat="server" ID="chkRevToDate" Checked="false" />
在名为Customer.cs的文件中将值加载到DataGrid中的代码:
public static DataGrid BuildGrid(bool IncludeContacts)
{
DataGrid NewDg = new DataGrid();
NewDg.DataKeyField = "ID";
NewDg.AutoGenerateColumns = false;
NewDg.CssClass = "tblResults draggable";
NewDg.HeaderStyle.CssClass = "tblResultsHeader";
NewDg.AlternatingItemStyle.CssClass = "ResultsStyleAlt";
NewDg.ItemStyle.CssClass = "ResultsStyle";
NewDg.Columns.Add(Load.CreateBoundColumn("VATNo", "VAT No"));
NewDg.Columns.Add(Load.CreateBoundColumn("CurrencyDesc", "Currency"));
if (chkRevToDate.Checked) //error
{
NewDg.Columns.Add(Load.CreateBoundColumn("RevToDate", "Re To Date (Net)"));
}
return NewDg;
}
有没有办法在另一个类中调用chkRevToDate?
答案 0 :(得分:1)
您应该在页面中使用DataGrid
和CheckBox
提供公共媒体资源。此属性只返回bool
:
public bool ShowRevToDateColumn
{
get { return chkRevToDate.Checked; }
set { chkRevToDate.Checked = value; }
}
然后您需要在另一个文件中添加您的页面实例。
你不应该创建实例,它已经存在。如果该类是具有静态方法的实用程序类,则可以使用HttpContext.Current
:
PageClassName page = HttpContext.Current.Handler as PageClassName;
if (page != null)
{
bool checked = page.ShowRevToDateColumn;
}
将它作为参数传递给方法BuildGrid
可能会更好。
答案 1 :(得分:1)
您应该在客户类中传递BuildGrid函数的复选框引用,而不是在BuildGrid函数上访问此复选框
根据您的代码编辑的代码
public static DataGrid BuildGrid(bool IncludeContacts , CheckBox chkRevToDate )
{
if (chkRevToDate.Checked)
{
NewDg.Columns.Add(Load.CreateBoundColumn("RevToDate", "Re To Date (Net)"));
}
}
您可以像在那样调用Customer.aspx.cs中的函数
ClassName.BuildGrid(true,chkRevToDate);
// chkRevToDate是您的aspx文件中的复选框