从另一个类向表单上的gridView添加数据

时间:2013-11-23 19:53:29

标签: c# .net winforms datagridview

如何将数据从另一个类添加到表单上的dataGridView?

这是课程:

class TermSh
    {

        public HttpWebRequest request_get_page_with_captcha;
        public HttpWebResponse response_get_page_with_captcha;
        public string url;
        public Form1 form1;
        public BindingSource bindingSource1 = new BindingSource();
        public int id = 0;



        public TermSh(Form1 form1)
        {
            this.form1 = form1;
            form1.dataGridView1.DataSource = bindingSource1;
        }

        public void somemethod()
        {
            try
            {                

                cookies += response_get_page_with_captcha.Headers["Set-Cookie"];


                bindingSource1.Add(new Log(id++, DateTime.Now, cookies));
                form1.dataGridView1.Update();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

和表单类:

TermSh term_sh = new TermSh(this);
term_sh.somemethod();

我做错了什么?为什么我的datagridview在代码执行后为空,但是我看到,debugSource1不为空。 如何添加数据?

1 个答案:

答案 0 :(得分:3)

我认为,你实现目标的方式是不正确的。 首先,我认为将Form类传递给一个类是非常非常糟糕的。然后你可以简单地操作一个列表并返回值并在你的表单中使用这个值(列表)。

我认为最好这样做: [编辑1]下面这个类,是你的ptimary类有一个方法,这个方法返回一个新的Log,你可以将这个返回值添加到Form1中的datagridview。

class TermSh
{

    public HttpWebRequest request_get_page_with_captcha;
    public HttpWebResponse response_get_page_with_captcha;
    public string url;
    public int id = 0;

    public List<Log> somemethod()
    {
        try
        {                

            cookies += response_get_page_with_captcha.Headers["Set-Cookie"];

            return new Log(id++, DateTime.Now, cookies); //use this return value in your Form and update datagridview 
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
}
之后

[编辑2]:您必须准备Log Class以用作bindingSource(Form1.bindingSource)中的集合并更新gridView。以下代码显示了Log类:

class Log
{
    private int id;
    private DateTime datetime;
    private string log_text;

    public Log(int id, DateTime datetime, string log_text)
    {
        this.id = id;
        this.datetime = datetime;
        this.log_text = log_text;
    }

    #region properties
    public int ID { get { return id; } set { id = value; } }
    public DateTime DATE_TIME { get { return datetime; } set { datetime = value; } }
    public string LOG_TEXT { get { return log_text; } set { log_text = value; } }
    #endregion
}

[编辑3]和Form1中的这段代码,使用类TermSh的返回值,并填充dataGridView:

TermSh term_sh = new TermSh(city, type, null, null);
logList.Add(term_sh.getPageWithCaptchaConnection());

logBindingSource.DataSource = logList;
logBindingSource.ResetBindings(false);

[编辑4]所以如果你有一个问题:“如何使用这个类作为bindingSource中的集合?”。这很简单,您可以使用对象填充dataGridView:this article很有帮助。