0

销毁和创建数据表时出现以下错误

RadioButton rdb2 = new RadioButton();
RadioButton rdb3 = new RadioButton();
rdb1 = (RadioButton)DataList1.Items[item.Id].FindControl("One");
rdb2 = (RadioButton)DataList1.Items[item.Id].FindControl("Three");
rdb3 = (RadioButton)DataList1.Items[item.Id].FindControl("Seven");

我所做的是基于用户选择,我从数据库中调用数据并将其放入一个新的数据表中,该表用作我的 DataList 的 DataScouce。

请帮助我如何解决此错误。我也看到了解决方案的链接,但它没有帮助。

4

4 回答 4

0

看起来您正在尝试引用一个DataList.Items确实存在于 position的项目Item.Id

确保DataList.Items包含元素并且Item.Id具有有效值(并且不高于 中的元素总数DataList.Items

假设item.Id是一个有效的整数,您可以检查是否item.Id小于集合:

RadioButton rdb2 = new RadioButton();

if (item.Id <= DataList.Items.Count()) {
  rdb2 = (RadioButton)DataList1.Items[item.Id].FindControl("Three");
}
于 2013-04-26T10:44:49.000 回答
0

DataList1.Items[item.Id]可以为null,也FindControl可以返回null,最好用于as将其转换为另一种类型。如果不是给定类型,它不会引发异常。但您需要在使用前检查 null 。

if((item.Id < 0) || ((DataList1.Items.Count() -1) < item.Id)) return; // assume item.id is index and integer value 

var dlItem = DataList1.Items[item.Id]; 
if(item !=null){
    rdb1 = dlItem.FindControl("One") as RadioButton;
    rdb2 = dlItem.FindControl("Three") as RadioButton;
    rdb3 = dlItem.FindControl("Seven") as RadioButton;
}
于 2013-04-26T10:47:52.460 回答
0

我建议您通过索引而不是 ID 访问项目。

RadioButton rdb2 = new RadioButton();
RadioButton rdb3 = new RadioButton();
rdb1 = (RadioButton)DataList1.Items[CurrentIndex].FindControl("One");
rdb2 = (RadioButton)DataList1.Items[CurrentIndex].FindControl("Three");
rdb3 = (RadioButton)DataList1.Items[CurrentIndex].FindControl("Seven");
于 2013-10-01T08:53:12.350 回答
0

当您在网格视图中启用分页时会导致此错误。如果你想从网格中删除一条记录,那么你必须做这样的事情。

int index = Convert.ToInt32(e.CommandArgument);
int i = 指数 % 20;
// 这里 20 是我的 GridView 的页面大小。
GridViewRow 行 = gvMainGrid.Rows[i];
int id = Convert.ToInt32(gvMainGrid.DataKeys[i].Value);
新的 GetData().DeleteRecord(id);
GridView1.DataSource = RefreshGrid();
GridView1.DataBind();

希望这能回答这个问题。

于 2014-07-15T13:21:25.307 回答