我一直试图让它工作一段时间但不能(我对C#和OOP来说相当新)。
基本上,我在第二种形式上有这段代码:
private void button1_Click(object sender, EventArgs e)
{
if (charCount > 2 && charCount < 30)
{
try
{
conn.Open();
}
catch (Exception ex)
{
//Error handling code here
}
finally
{
conn.Close();
}
//Run the SQL statements
try
{
//SQL insert data is here
}
catch (Exception ie)
{
MessageBox.Show(ie.Message);
}
finally
{
//Close the connection
if (conn.State != ConnectionState.Closed)
{
conn.Close();
}
mainForm.refreshCall();
this.Close();
}
}
else
{
MessageBox.Show("Part numbers can be between 2 and 30 characters.\n Yours was " + charCount + " characters long.", "Error");
}
}
这一切都运行良好并且做了它应该做的事情,这是将一些数据插入到SQL数据库中(我把那个代码拿出来使它更清洁)。所以一旦发生这种情况,我会尝试执行mainForm.refreshCall()
。这个refreshCall方法存在于我的第一个表单或mainForm
上,如下所示:
public static void refreshCall()
{
SqlConnection conn = new SqlConnection("Data Source=DSERVER\\NEW_SQL;Initial Catalog=AWSoftware;Integrated Security=True");
try
{
conn.Open();
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter("SELECT part_num from dbo.CustomParts", conn);
adapter.Fill(ds);
this.listParts.DataSource = ds.Tables[0];
this.listParts.DisplayMember = "part_num";
conn.Close();
}
catch (SqlException odbcEx)
{
MessageBox.Show("There was an error connecting to the data source\nError Code: 1001", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
但是,this.listParts.DataSource
和this.listParts.DisplayMember
都告诉我它们不是有效的静态属性Error,静态方法或静态字段初始化。我完全被这意味着什么困惑。如果有人愿意为我阐明这一点,我将不胜感激!
答案 0 :(得分:0)
您的refreshCall
被标记为static
,但您正在引用实例化的变量,在这种情况下,您的ListBox
,因此无效。您必须将ListBox作为参数引用传递,或者只删除static
属性。
最简单的方法:
public void refreshCall() {
// blah-blah
}
然后方法调用更改为:
this.refreshCall();