c#asp.net索引超出范围。当我尝试选择一行时

c#asp.net索引超出范围。当我尝试选择一行时,c#,sql,asp.net,C#,Sql,Asp.net,我的页面上有一个gridview。我有两段SQL代码来绑定gridview 第一个是在页面加载时运行。如果有从第一个SQL返回的记录,我可以在gridview上选择一行 但问题是,当第一个SQL没有返回任何记录时,我有一个按钮运行另一个SQL并将其结果绑定到gridview。但当我尝试选择一行时,会出现以下错误: 索引超出范围。当我试图选择一行时,它必须是非负的并且小于集合的大小。参数名称:索引 我的代码是这样的 第一个SQL(在页面加载时运行) 这是当我点击按钮时运行的第二个SQL void

我的页面上有一个gridview。我有两段SQL代码来绑定gridview

第一个是在页面加载时运行。如果有从第一个SQL返回的记录,我可以在gridview上选择一行

但问题是,当第一个SQL没有返回任何记录时,我有一个按钮运行另一个SQL并将其结果绑定到gridview。但当我尝试选择一行时,会出现以下错误:

索引超出范围。当我试图选择一行时,它必须是非负的并且小于集合的大小。参数名称:索引

我的代码是这样的

第一个SQL(在页面加载时运行)

这是当我点击按钮时运行的第二个SQL

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;
}