如何从不同的类文件中调用复选框?

时间:2015-07-01 11:42:02

标签: c# asp.net visual-studio checkbox datagrid

我有一个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?

2 个答案:

答案 0 :(得分:1)

您应该在页面中使用DataGridCheckBox提供公共媒体资源。此属性只返回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文件中的复选框