1

aspxページが最初にロードされたときにデータテーブルを作成したいと思います。クラスファイルに空白行のデータテーブルを作成するコードを配置しました。以下は、データテーブルを作成するためのコードです。

public class PaymentDetailsDataTable
{
    public PaymentDetailsDataTable()
    {
        DataTable pventries = new DataTable();

        DataColumn col1 = new DataColumn("col1");
        DataColumn col2 = new DataColumn("col2");
        DataColumn col3 = new DataColumn("col3");
        DataColumn col4 = new DataColumn("col4");
        DataColumn col5 = new DataColumn("col5");
        DataColumn col6 = new DataColumn("col6");
        DataColumn col7 = new DataColumn("col7");
        DataColumn col8 = new DataColumn("col8");
        DataColumn col9 = new DataColumn("col9");

        col1.DataType = System.Type.GetType("System.Int32");
        col2.DataType = System.Type.GetType("System.String");
        col3.DataType = System.Type.GetType("System.String");
        col4.DataType = System.Type.GetType("System.String");
        col5.DataType = System.Type.GetType("System.String");
        col6.DataType = System.Type.GetType("System.String");
        col7.DataType = System.Type.GetType("System.String");
        col8.DataType = System.Type.GetType("System.Double");
        col9.DataType = System.Type.GetType("System.String");

        pventries.Columns.Add(col1);
        pventries.Columns.Add(col2);
        pventries.Columns.Add(col3);
        pventries.Columns.Add(col4);
        pventries.Columns.Add(col5);
        pventries.Columns.Add(col6);
        pventries.Columns.Add(col7);
        pventries.Columns.Add(col8);
        pventries.Columns.Add(col9);

        pventries.Rows.Add();        

    }
} 

コードビハインドファイルで、クラスをインスタンス化し、次のように使用しようとしました。

    public partial class create_pv  : System.Web.UI.Page 
{
    String conn = WebConfigurationManager.ConnectionStrings["pvconn"].ToString();

    PaymentDetailsDataTable pmd = new PaymentDetailsDataTable();




    protected void Page_Load(object sender, EventArgs e)
    {


        /**/if(!IsPostBack)
            pmd.PaymentDetailsDataTable(); 
            allpventries.DataSource = pmd;
            allpventries.DataBind();
        }
}

PaymentDetailsDataTableこのようなメソッドにアクセスしようとするとpmd.PaymentDetailsDataTable()、次のエラーが発生します

'PaymentDetailsDataTable' does not contain a definition for 'PaymentDetailsDataTable' and no extension method 'PaymentDetailsDataTable' accepting a first argument of type 'PaymentDetailsDataTable' could be found (are you missing a using directive or an assembly reference?)  

メソッドreturntype(PaymentDetailsDataTable)をvoidに変更すると機能しますが、後でデータテーブルをグリッドビュー(allpventriesと呼ばれます)にバインドしたいので、コンパイラエラーが発生します。

コードベースが別のクラスにあるデータテーブルからデータグリッドをバインドするにはどうすればよいですか?後で、データテーブルに新しい行を追加します。これを達成するための代替オプションも受け入れられます。

オブジェクト指向プログラミングとC#ASP.NETの非常に新しい。

4

2 に答える 2

2

コンストラクターでローカルを作成していますがDataTable、そのコンストラクターはPaymentDetailsDataTable何にも割り当てられていません。したがって、メソッドからDataTableを返すか、から継承する必要がありますDataTable。これがあなたの本来の意図だと思います。

public class PaymentDetailsDataTable : DataTable
{
    public PaymentDetailsDataTable()
    {
        DataColumn col1 = new DataColumn("col1");
        DataColumn col2 = new DataColumn("col2");
        DataColumn col3 = new DataColumn("col3");
        DataColumn col4 = new DataColumn("col4");
        DataColumn col5 = new DataColumn("col5");
        DataColumn col6 = new DataColumn("col6");
        DataColumn col7 = new DataColumn("col7");
        DataColumn col8 = new DataColumn("col8");
        DataColumn col9 = new DataColumn("col9");

        col1.DataType = System.Type.GetType("System.Int32");
        col2.DataType = System.Type.GetType("System.String");
        col3.DataType = System.Type.GetType("System.String");
        col4.DataType = System.Type.GetType("System.String");
        col5.DataType = System.Type.GetType("System.String");
        col6.DataType = System.Type.GetType("System.String");
        col7.DataType = System.Type.GetType("System.String");
        col8.DataType = System.Type.GetType("System.Double");
        col9.DataType = System.Type.GetType("System.String");

        this.Columns.Add(col1);
        this.Columns.Add(col2);
        this.Columns.Add(col3);
        this.Columns.Add(col4);
        this.Columns.Add(col5);
        this.Columns.Add(col6);
        this.Columns.Add(col7);
        this.Columns.Add(col8);
        this.Columns.Add(col9);

        this.Rows.Add();
    }
}
于 2012-09-27T09:19:48.413 に答える
1

クラスは、オブジェクトの参照を返すPaymentDetailsDataTableクラスのサブクラスであるDataTableか、クラス内のメソッドを定義する必要があります。PaymentDetailsDataTableDataTable

public class PaymentDetailsDataTable : DataTable
{
    public PaymentDetailsDataTable()
    {
        Columns.Add("Col1", typeof(int));
        Columns.Add("Col2");

        Rows.Add(1, "Foo");
        Rows.Add(2, "Bar");
    }
}

そしてpage_loadハンドラーのコード、

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
   {
      allpventries.DataSource = new PaymentDetailsDataTable();
      allpventries.DataBind();
   }
}
于 2012-09-27T09:16:59.427 に答える