当我销毁并创建数据表
时,我收到以下错误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。
请帮我解决这个错误。我已经看到link也用于解决方案,但它没有帮助。
答案 0 :(得分:0)
您似乎正在尝试引用位置DataList.Items
中确实存在的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");
}
答案 1 :(得分: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;
}
答案 2 :(得分: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");
答案 3 :(得分:0)
在网格视图中启用分页时会导致此错误。如果你想从网格中删除一条记录,那么你必须做这样的事情。
int index = Convert.ToInt32(e.CommandArgument);
int i = index%20;
//这里20是我的GridView的页面大小。
GridViewRow row = gvMainGrid.Rows [i];
int id = Convert.ToInt32(gvMainGrid.DataKeys [i] .Value);
new GetData()。DeleteRecord(id);
GridView1.DataSource = RefreshGrid();
GridView1.DataBind();
希望这能回答这个问题。