我的网页上有一个gridview。我有2个SQL代码片段来绑定gridview。
第一个是在页面加载时运行。如果有第一个SQL返回的记录,我可以在gridview上选择一行。
但问题是当第一个SQL没有返回记录时,我有一个运行另一个SQL的按钮,并将其结果绑定到gridview。但是当我尝试选择一行时,我收到了这个错误:
指数超出范围。当我尝试选择一行时必须是非负的且小于集合的大小。参数名称:index
我的代码就是那样
第一个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;
GridView1.DataBind();
baglanti.Close();
}
那就是当我点击按钮时运行的第二个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_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;
}
为什么我收到此错误?
EDIT-- 我解决了像这样更改页面加载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();
}
答案 0 :(得分:1)
确保您没有在回发时重新绑定数据网格 - 您可以在PageLoad事件中执行此操作 - 例如
if (!IsPostback)
{
... bind your datagrid
}
答案 1 :(得分:0)
在GridView1_SelectedIndexChanged事件中,您可以简单地执行一个RowCount,以便在其他代码运行之前查看该值是否为!= 0?
if (GridView1.RowCount <= 0)
{
return;
}