关于DetailsView使用DropDownList1
在DetailsView中创建一个模板列,在模板列中加入DropDownList
例:
<asp:TemplateField HeaderText="类型">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList2" runat="server">
<asp:ListItem>0</asp:ListItem>
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>00</asp:ListItem>
<asp:ListItem>11</asp:ListItem>
<asp:ListItem>22</asp:ListItem>
<asp:ListItem>33</asp:ListItem>
</asp:DropDownList>
</InsertItemTemplate>
</asp:TemplateField>
在插入(DetailsView1_ItemInserting)或更新(DetailsView1_ItemUpdating)事件中加入
代码:
string str=((DropDownList)DetailsView1.Rows[3].Cells[1].FindControl("DropDownList1")).SelectedValue
e.Values.Add("type", str);
OK,就这样就可以使用DropDownList 或其它控件了.
========================================================================
作者: Alwin 转贴请注明作者和出处
决绝的思路是在模版列中增加一个Label的控件,绑定数据源中的字段值, 在创建DropDownList控件的时候
加载DropDownList的值,同时从Label控件中获取绑定的值,设置到DropDownList中, 这样就实现了
DropDownList的显示问题。 其实现的代码如下:
protected void dvwColumns_PreRender(object sender, EventArgs e)
{
if (IsPostBack)
{
if (dvwColumns.CurrentMode == DetailsViewMode.Edit)
{
DropDownList ddlDataType = (DropDownList)dvwColumns.FindControl("ddlDataType");
Label labDataType = (Label)dvwColumns.FindControl("labDataType");
ddlDataType.DataSource = deType;
ddlDataType.DataBind();
ddlDataType.SelectedValue = labDataType.Text;
}
else if (dvwColumns.CurrentMode == DetailsViewMode.Insert)
{
DropDownList ddlDataType = (DropDownList)dvwColumns.FindControl("ddlDataType");
ddlDataType1.DataSource = deType;
ddlDataType1.DataBind();
ddlDataType.SelectedValue = "VARCHAR2";
}
}
=====================================================
如何访问DetailsView控件EditItemTemplate中的控件?
今 天在做项目时用到了DetailsView控件,在EditItemTemplate中需要自己初始一个DropDownList的数据。我曾尝试在 DetailsView控件的ModeChanging或ModeChanged事件中使用FindControl方法来获取目标控件的访问,但是都失败 了。
我是利用DropDownList_DataBinding事件来解决,给在DetailsView控件TemplateField中的DropDownList加上onDataBinding事件命令。然后在cs中处理这个事件就OK了。
DetailsView的aspx中代码如下(省略数据源代码):
1
<
asp:DetailsView ID
=
"
DetailsView1
"
DataKeyNames
=
"
ClassID
"
2
runat
=
"
server
"
DataSourceID
=
"
SqlDataSource1
"
AutoGenerateRows
=
"
False
"
>
3
<
Fields
>
4
<
asp:BoundField HeaderText
=
"
分类名称
"
DataField
=
"
ClassTitle
"
/>
5
<
asp:TemplateField HeaderText
=
"
所属分类
"
>
6
<
ItemTemplate
>
7
<%
#Eval(
"
ParentTitle
"
)
%>
8
</
ItemTemplate
>
9
<
EditItemTemplate
>
10
<
asp:DropDownList ID
=
"
ddlParent
"
runat
=
"
server
"
onDataBinding
=
"
ddlParent_DataBinding
"
>
11
</
asp:DropDownList
>
12
</
EditItemTemplate
>
13
</
asp:TemplateField
>
14
<
asp:CommandField ShowEditButton
=
"
True
"
/>
15
</
Fields
>
16
</
asp:DetailsView
>
.cs文件中:
1
protected
void
ddlParent_DataBinding(
object
sender, EventArgs e)
2
{
3
//
添加数据绑定代码
4
//
BindDropDownList((DropDownList)sender);
5
}