C# 数组不会将其值保留在其填充的方法之外
我有一行代码,它获取一个表的ID并将它们提供给一个int数组,称为idPuntos注意:这个方法夹在其他地方的Open和Close方法之间,所以从这个意义上讲,它与数据库无关C# 数组不会将其值保留在其填充的方法之外,c#,C#,我有一行代码,它获取一个表的ID并将它们提供给一个int数组,称为idPuntos注意:这个方法夹在其他地方的Open和Close方法之间,所以从这个意义上讲,它与数据库无关 public void refreshIds() { idInit.Clear(); try { SqlCommand getIds = new SqlCommand("SELECT id_punto FROM Punt
public void refreshIds()
{
idInit.Clear();
try
{
SqlCommand getIds = new SqlCommand("SELECT id_punto FROM Puntos", cnn);
SqlDataReader idsReader = getIds.ExecuteReader();
while (idsReader.Read())
{
//idInit is a global ArrayList
idInit.Add(idsReader[0]);
}
//idPuntos is a global array, declared without value
idPuntos = (int[])idInit.ToArray(typeof(int));
//This line works here, I test printed it and got the values I wanted, yet it doesn't work in the following method...
bajaId = idPuntos[0];
}
catch (SqlException)
{
statusbajas.Text = "Hubo un error al recuperar los datos.";
}
}
这里不行:
private void listabajas_SelectedIndexChanged(object sender, EventArgs e)
{
//it doesnt work here, and i dont understand why
bajaId = idPuntos[0];
//statusbajas.Text = "es " + listabajas.SelectedIndex.ToString();
}
有什么想法吗
编辑:通过不工作,我的意思是IdPantos[0]看起来是空的,而它不在第一个字段中,在第一个字段中它实际上保存了我提供给它的值
编辑2:问题似乎始于构造函数。在第一次关闭调用时设置断点,使我意识到从那时起崩溃就发生了
这是我的构造器:
public AltasPuntos()
{
InitializeComponent();
str = Properties.Settings.Default.SWMConnString;
cnn = new SqlConnection(str);
cnn.Open();
refreshListNombres();
cnn.Close();
cnn.Open();
refreshIds();
cnn.Close();
}
您需要确保在触发listabajas_SelectedIndexChanged之前调用RefreshID
如果您使用的是WinForms,则可以在窗体的构造函数中调用RefreshID
从问题中提供的信息来看,这差不多就是我能给出的建议。请准确解释什么不起作用。对不起,在第二种方法中,idPuntos[0]似乎为空,在第一个实例中,它确实保存了我提供给它的值。在数组初始化或数组位于另一个实例之前,您正在调用listabajas_SelectedIndexChanged。将断点放在bajaId=idPuntos[0]上;行并检查您的IDPentos是否已初始化。这是一个ASP.NET WebForms应用程序吗?它是一个WindowsFormsApplication、.NET Framework 4.5,使用C。顺便说一句,所有变量都是全局变量。能否在数组初始化之前调用listabajas_SelectedIndexChanged?我在开始时在表单加载时运行refreshIds方法,不确定listabajas_SelectedIndexChanged是否作为设计项在默认情况下被调用。我将调用移动到构造函数,但它仍然表示IndexChanged方法中的值为null。您是否在其他任何地方调用refreshIds?如果使用不返回任何内容的查询调用IDPTO[0],它可能会变为null。你能在refreshIds中的bajaId=IdPantos[0]上设置一个断点并查看它何时被击中吗?我设置了断点,它肯定会首先调用listabajas\u SelectedIndexChanged,因为它在断点之前停止。我想我应该先找到调用RefreshID的方法?listabajas_SelectedIndexChanged不能在表单的构造函数之前调用。这是不可能的。您可以在构造函数中放置断点,然后查看执行顺序。我在构造函数中放置了一个断点,在其中调用RefreshID,它仍然会将我发送到listabajas\u SelectedIndexChanged。