我这里有3个类:
1:
namespace DataAccess
{
    public class Class1
    {
public DataTable dtqramount()//表的出处
        {
            SqlCommand cmd = new SqlCommand(Common.Class1.sql_qr_amount, cn);
            da = new SqlDataAdapter(cmd);
            da.Fill(ds, Common.Class1.table_qr_amount);
            dt=ds.Tables [0];
            return dt;
        }
}
}
2:
namespace Chart
{
    public delegate DataTable wtdelegate();
    public class Class1
    {
        #region 奇瑞全年销售曲线//画图部分
        public void qrallyearamount(ZedGraphControl zgc,wtdelegate Makeking)
        {
            DataTable dt = Makeking();
            GraphPane myPane = zgc.GraphPane;            // Title
            myPane.Title.Text = "奇瑞日销售统计";
            myPane.XAxis.Title.Text = "日期";
            myPane.YAxis.Title.Text = "数量";
             //初始化line
            Random rd = new Random();
            PointPairList line = new PointPairList();
            for (int i = 0; i < dt.Rows.Count; i++)
            {                /*
                 *    添加坐标对,需要将X/Y值全部转为double类型。原本以为他们会支持DateTime类型。
                 *   个人觉得还是很有必要的,毕竟很多图都是时间-**曲线图,有需求。
                 */
                string date = Convert.ToDateTime(dt.Rows[i]["qr_data"]).ToString("MM.dd");
                line.Add(Convert.ToDouble(date), Convert.ToDouble(dt.Rows[i]["amount"]));
            }
            // 绘制曲线
            LineItem li = myPane.AddCurve("数量", line, Color.FromArgb(rd.Next(255), rd.Next(255), rd.Next(255)), SymbolType.Circle);
            myPane.Chart.Fill = new Fill(Color.White,
        Color.FromArgb(255, 255, 166), 45.0F);            zgc.AxisChange();
        }
        #endregion
    }
}
3:
namespace 销售统计课件
{
      public partial class Form1 : Form
    {
        private MemoryStream memoryStream;
        public Form1()
        {
            InitializeComponent();
            SetSkinFile(Properties.Resources.vista1); //引用皮肤        }        private void Form1_Load(object sender, EventArgs e)
        {
            this.creatchart();
            //生成奇瑞交叉表
            //Chart.Class1 ct = new Chart.Class1();
            DataAccess .Class1 dac=new DataAccess.Class1();            ct.qrallyearamount(zedGraphControl1,dac.dtqramount);//Chart层中的图表方法
                        this.data();
        }
我想把第一个类里的表当做参数传给第二个图表类,再在第三个类里调用,但是在蓝色字体哪里出错,委托不允许这样使用吗?请高人指点谢谢~

解决方案 »

  1.   

    蓝字部分要修改一下wtdelegate del = new wtdelegate(dac.dtqramount);
     ct.qrallyearamount(zedGraphControl1,del);//Chart层中的图表方法
      

  2.   

    qrallyearamount方法是这么定义的!
    public void qrallyearamount(ZedGraphControl zgc,wtdelegate Makeking)第二个参数是wtdelegate 类型的委托:
    public delegate DataTable wtdelegate();所以你这么调用肯定有问题的!
    ct.qrallyearamount(zedGraphControl1,dac.dtqramount);//Chart层中的图表方法
    你要先将dac.dtqramount转换成wtdelegate 类型的委托,楼上的是一种方法,还可以这样:
    ct.qrallyearamount(zedGraphControl1,new wtdelegate(dac.dtqramount));