在RowDataBound事件中,用SQL语句访问数据库来绑定DropDownList中的数据,假设Gridview有3条记录,请问SQL访问数据库几次?
如果是3次的话,有什么好方法来绑定DropDownList中的数据呢。
如果仅仅为了编辑时选择用的话,在 RowEditing 中去绑定可以吗?
如果是3次的话,有什么好方法来绑定DropDownList中的数据呢。
如果仅仅为了编辑时选择用的话,在 RowEditing 中去绑定可以吗?
if(DropDownListSource == null) {
// 从数据库加载数据
// ...
}
DropDownListInGridViewRow.DataSource = DropDownListSource;
//...
}
绝对可以,我就是这样子做的,不过在模板列中要放有Dropdownlist。参考代码
//编辑
protected void gvWorkTemplate_RowEditing(object sender, GridViewEditEventArgs e)
{
this.gvWorkTemplate.EditIndex = e.NewEditIndex;
this.gvWorkTemplate.DataSource = dt;
this.gvWorkTemplate.DataBind();
DropDownList dropMemu1 = (DropDownList)gvWorkTemplate.Rows[gvWorkTemplate.EditIndex].FindControl("dropMemu1");//实例化对像
DropDownList dropMemu2 = (DropDownList)gvWorkTemplate.Rows[gvWorkTemplate.EditIndex].FindControl("dropMemu2");
DropDownList dropMemu3 = (DropDownList)gvWorkTemplate.Rows[gvWorkTemplate.EditIndex].FindControl("dropMemu3");
DropDownList dropMemu4 = (DropDownList)gvWorkTemplate.Rows[gvWorkTemplate.EditIndex].FindControl("dropMemu4");
DataAccess.BindDropDownList(WorkTemplateProc.GetWorkTemplateMemu("00000000", "1"), dropMemu1, "memuName", "memuId");
dropMemu1.Items.Insert(0, new ListItem("-请选择-", "0"));
定义一个datatable myDataTable =ds.Tables[index];把数据放入缓存:Cache.Insert("dt", myDataTable);从缓存中取得数据: myDataTable =(DataTable)Cache .Get ("dt");然后判断一下maDataTable是否为null 防止缓存过期
我的代码:
protected void gvMain_RowEditing(object sender, GridViewEditEventArgs e)
{
int index = e.NewEditIndex;
GridViewRow gvr = gvMain.Rows[index]; DropDownList dp = (DropDownList)gvr.FindControl("cmbStation");
//dp.Items.Clear(); 这里发现dp是NULL,同样的代码在RowUpdating中不是NULL;为什么呢。
dp.Items.Add(new ListItem("1", "a"));
dp.Items.Add(new ListItem("2", "b"));
}
我的思路是:在没有编辑之前,最好不绑定DropDownList的数据.既然在RowEditing 中去绑定可行,求代码:要求<ItemTemplate>中放的是Label,<EditItemTemplate>中放的是DropDownList。
<asp:TemplateField HeaderText="营业点" SortExpression="ZSTATION_ID">
<EditItemTemplate>
<asp:DropDownList ID="cmbStation" runat="server" Text='<%# Bind("ZSTATION_ID") %>' DataSourceID="dsStation" DataTextField="ZNAME" DataValueField="ZID">
</asp:DropDownList>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Left" Width="100px" />
<HeaderStyle HorizontalAlign="Left" Width="100px" />
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("STATION_NAME") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>