c#asp.net索引超出范围。当我尝试选择一行时
我的页面上有一个gridview。我有两段SQL代码来绑定gridview 第一个是在页面加载时运行。如果有从第一个SQL返回的记录,我可以在gridview上选择一行 但问题是,当第一个SQL没有返回任何记录时,我有一个按钮运行另一个SQL并将其结果绑定到gridview。但当我尝试选择一行时,会出现以下错误: 索引超出范围。当我试图选择一行时,它必须是非负的并且小于集合的大小。参数名称:索引 我的代码是这样的 第一个SQL(在页面加载时运行) 这是当我点击按钮时运行的第二个SQLc#asp.net索引超出范围。当我尝试选择一行时,c#,sql,asp.net,C#,Sql,Asp.net,我的页面上有一个gridview。我有两段SQL代码来绑定gridview 第一个是在页面加载时运行。如果有从第一个SQL返回的记录,我可以在gridview上选择一行 但问题是,当第一个SQL没有返回任何记录时,我有一个按钮运行另一个SQL并将其结果绑定到gridview。但当我尝试选择一行时,会出现以下错误: 索引超出范围。当我试图选择一行时,它必须是非负的并且小于集合的大小。参数名称:索引 我的代码是这样的 第一个SQL(在页面加载时运行) 这是当我点击按钮时运行的第二个SQL void
void listelehepsi()
{
baglanti.Open();
MySqlCommand cmd = new MySqlCommand("SELECT * From kayitlar", baglanti);
DataTable dataTable = new DataTable();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dataTable);
GridView1.DataSource = dataTable;
GridView1.DataBind();
baglanti.Close();
}
这是GridView1\u SelectedIndexChanged事件
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
int secili;
secili = GridView1.SelectedIndex;
GridViewRow row = GridView1.Rows[secili]; // I GOT ERROR HERE
TextBox1.Text = row.Cells[1].Text;
}
为什么我会犯这个错误
编辑--
我得到了一个解决方案,可以像这样更改页面加载sql
void listele()
{
baglanti.Open();
MySqlCommand cmd = new MySqlCommand("SELECT * From kayitlar where durum='Çözülmedi' or durum='İşlem Yapılıyor'", baglanti);
DataTable dataTable = new DataTable();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dataTable);
GridView1.DataSource = dataTable;
if (!IsPostBack)
{
GridView1.DataBind();
}
else
{
//
}
baglanti.Close();
}
确保您没有在回发时重新绑定datagrid—您可以在PageLoad事件中执行此操作—类似于
if (!IsPostback)
{
... bind your datagrid
}
在GridView1\u SelectedIndexChanged事件中,是否可以简单地进行行计数以查看值是否为!=在其他代码运行之前执行0
if (GridView1.RowCount <= 0)
{
return;
}
if(GridView1.RowCount)可能与我假设的重复?您是否看到部分,其中指出.SelectedIndex的默认值为-1
(这表示当前未选择任何行)?你应该附加调试器,看看secili
的值是什么,我敢打赌这会让你吃惊…你能附加你的pageload事件吗?你应该只在(!IsPostback)@maccettura是的,我知道,但是第一个是如何工作的?我的意思是,如果我在页面加载上有记录,我可以选择行
if (GridView1.RowCount <= 0)
{
return;
}