aspx代码如下:
<EmptyDataTemplate>
<asp:DetailsView runat="server" DataSource
DefaultMode="Insert" Height="50px" Width="125px"
oniteminserted="DetailsView1_ItemInserted" AutoGenerateRows="False"
DataKeyNames="id">
<FieldHeaderStyle Wrap="False" />
<Fields>
<asp:BoundField DataField="chuliren" HeaderText="处理人"
SortExpression="chuliren" />
<asp:BoundField DataField="shenqingren" HeaderText="申请人"
SortExpression="shenqingren" />
<asp:BoundField DataField="gongsi" HeaderText="公司"
SortExpression="gongsi" />
<asp:TemplateField HeaderText="部门" SortExpression="bumen">
<EditItemTemplate>
<asp:DropDownList runat="server"
DataSource DataTextField="bumen"
DataValueField="bumen" AutoPostBack="True" >
</asp:DropDownList>
<asp:SqlDataSource runat="server"
ConnectionString="<%$ ConnectionStrings:dngzConnectionString %>"
SelectCommand="SELECT * FROM [jiagou]"></asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
</Fields>
<HeaderStyle Wrap="True" />
</asp:DetailsView>
</EmptyDataTemplate>
aspx.cs代码如下:
protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
string str = ((DropDownList)DetailsView1.Rows[3].Cells[1].FindControl("DropDownList1")).SelectedItem.Text;
e.Values.Add("type", str);
}
运行的时候,显示string str = ((DropDownList)DetailsView1.Rows[3].Cells[1].FindControl("DropDownList1")).SelectedItem.Text;有错误,DetalisView1不存在上下文中,这是为什么呢?
这个是在gridview之内的,还有是在UpdatePanel之内,还有是在ContentPlaceHolder之内,不知道是不是受这些影响?
如何修改?
DetailsView1是在一个数据模板EmptyDataTemplate中,凡是在数据模板中的对象都需要通过FindControl来查找。
那要用两个FindControl应该怎么写呢
@xzf_fancy: 我也没用过DETAILSVIEW,说不上,不过,你既然对DETAILSVIEW设置了ItemInserting事件,那么在事件处理里,这个SENDER对象应该就是这个DETAILSVIEW(或者是它下面的一个ITEM),而事件参数e里也会有一个属性Item指向当前正在触发事件的Item。
或者把代码修改成:
protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) { string str = (e.Item.FindControl("DropDownList1")).SelectedItem.Text; e.Values.Add("type", str); }
然后再在这个基础上你小调以下,修正其中的错误后使用。