to jupiterII(): 错误: Object reference not set to an instance of an object. private void dgdPf_Edit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { DropDownList listValueType=(DropDownList)e.Item.FindControl("listValueType"); Label lblValueType=(Label)e.Item.FindControl("lblValueType"); listValueType.SelectedIndex=listValueType.Items.IndexOf(listValueType.Items.FindByValue(lblValueType.Text.ToString())); dgdPf.EditItemIndex=e.Item.ItemIndex; BindData(); } 调试发现,listValueType为null,也就是说listValueType控件没找到,lblValueType有内容。我估计是由于在EditCommand时DropDownList还没有初始化。怎么解决呢?
<ItemTemplate>
<asp:Label id=lblValueType runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ValueTypeName") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id=listValueType runat="server" CssClass="td" DataValueField='<%# DataBinder.Eval(Container.DataItem, "ValueType") %>'>
<asp:ListItem Value="0">普通文本</asp:ListItem>
<asp:ListItem Value="1">整数</asp:ListItem>
<asp:ListItem Value="2">小数</asp:ListItem>
<asp:ListItem Value="9">选择框</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
c#是通过一个DataTable再增加了一列ValueTypeName来实现的,感觉很不对,因为如果要修改对应的内容名称的话我要两个地方都要改,但我不知道该怎么写才能比较好。
((DropDownList)e.Item.FindControl("DropDownList1")).SelectedIndex必须对应的是索引号,而我从数据库里得到的是值。除非再加个循环判断,但这就不是数据绑定的做法了,而且在asp.net里不好实现。
ddl_Language.Items.FindByValue(value).Selected=true;
这个方法行不行??
1.先找到LABEL,得到它的值
2.然后找到DROPDOWNLIST,绑定它
3.让它的默认值为LABEL的值这样的帖子很多呀,你在搜索一下。
DropDownList1.Selectindex=DropDownList1.items.indexof(DropDownList1.items.findbyvalue((Label)e.Item.FindControl("lblValueType").text.tostring()));
错误:
Object reference not set to an instance of an object.
private void dgdPf_Edit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DropDownList listValueType=(DropDownList)e.Item.FindControl("listValueType");
Label lblValueType=(Label)e.Item.FindControl("lblValueType");
listValueType.SelectedIndex=listValueType.Items.IndexOf(listValueType.Items.FindByValue(lblValueType.Text.ToString()));
dgdPf.EditItemIndex=e.Item.ItemIndex;
BindData();
}
调试发现,listValueType为null,也就是说listValueType控件没找到,lblValueType有内容。我估计是由于在EditCommand时DropDownList还没有初始化。怎么解决呢?
{
dgdPf.EditItemIndex=e.Item.ItemIndex;
BindData();
DropDownList listValueType=(DropDownList)dgdPf.Items[e.Item.ItemIndex].FindControl("listValueType");
Label lblValueType=(Label)dgdPf.Items[e.Item.ItemIndex].FindControl("lblValueType");
listValueType.SelectedIndex=listValueType.Items.IndexOf(listValueType.Items.FindByValue(lblValueType.Text.ToString()));
}
icyer的方法是可行的
<ItemTemplate>
<asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ValueTypeName") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label id="lblValueType" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ValueTypeName") %>' Visible="False" />
<asp:DropDownList id="listValueType" runat="server" CssClass="td" DataValueField='<%# DataBinder.Eval(Container.DataItem, "ValueType") %>'>
<asp:ListItem Value="0">普通文本</asp:ListItem>
<asp:ListItem Value="1">整数</asp:ListItem>
<asp:ListItem Value="2">小数</asp:ListItem>
<asp:ListItem Value="9">选择框</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>然后在DataGrid的ItemDataBound事件中加入:
if (e.Item.ItemType == ListItemType.EditItem)
{
DropDownList listValueType=(DropDownList)e.Item.FindControl("listValueType");
Label lblValueType=(Label)e.Item.FindControl("lblValueType");
listValueType.SelectedIndex=listValueType.Items.IndexOf(listValueType.Items.FindByValue(lblValueType.Text.ToString()));
}
我忘了在listValueType里加上runat=server。
我怎么总犯低级错误啊!!一定要改。
谢谢大家的热情帮助!