GridView编辑状态时,其中一列变成DropDownList供选择,然后执行更新,如何实现?我用模板列,但是后台cs文件中却不认“商品分类这”个DropDownList不知为何? <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
onrowediting="GridView1_RowEditing"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowupdating="GridView1_RowUpdating">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="商品编号" DataFormatString="{0:d}" HeaderText="商品编号" />
<asp:TemplateField HeaderText="商品类别">
<EditItemTemplate>
<asp:DropDownList ID="商品分类" runat="server" OnLoad="商品分类函数"></asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="商品类别名称" runat="server" Text='<%#Bind("商品类别名称") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="商品名称" HeaderText="商品名称" />
<asp:ImageField DataImageUrlField="商品小图地址" HeaderText="商品小图">
</asp:ImageField>
<asp:ImageField DataImageUrlField="商品大图地址" HeaderText="商品大图">
</asp:ImageField>
<asp:BoundField DataField="商品规格" HeaderText="商品规格" />
<asp:BoundField DataField="商品面料" HeaderText="商品面料" />
<asp:BoundField DataField="商品A价" DataFormatString="{0:c}" HeaderText="商品A价" />
<asp:BoundField DataField="商品B价" DataFormatString="{0:c}" HeaderText="商品B价" />
<asp:CheckBoxField DataField="是否精品" HeaderText="是否精品" />
onrowediting="GridView1_RowEditing"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowupdating="GridView1_RowUpdating">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="商品编号" DataFormatString="{0:d}" HeaderText="商品编号" />
<asp:TemplateField HeaderText="商品类别">
<EditItemTemplate>
<asp:DropDownList ID="商品分类" runat="server" OnLoad="商品分类函数"></asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="商品类别名称" runat="server" Text='<%#Bind("商品类别名称") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="商品名称" HeaderText="商品名称" />
<asp:ImageField DataImageUrlField="商品小图地址" HeaderText="商品小图">
</asp:ImageField>
<asp:ImageField DataImageUrlField="商品大图地址" HeaderText="商品大图">
</asp:ImageField>
<asp:BoundField DataField="商品规格" HeaderText="商品规格" />
<asp:BoundField DataField="商品面料" HeaderText="商品面料" />
<asp:BoundField DataField="商品A价" DataFormatString="{0:c}" HeaderText="商品A价" />
<asp:BoundField DataField="商品B价" DataFormatString="{0:c}" HeaderText="商品B价" />
<asp:CheckBoxField DataField="是否精品" HeaderText="是否精品" />
解决方案 »
- ASP.NET写的论坛 “发帖回帖” 应该怎么实现啊 ?分给的不多 没分了。。不回也进来看看吧
- GridView Columns ControlStyle Width
- 我想请教各位高手 在GridView模版中加控件,怎样才能使控件的值循环的被获取??
- sql表字段 复制
- 如何将SoapExtention的派生类和我的ws方法联系起来?
- 怎样在ASP.NET 2.0(C#)中实现,日期控件想WINFORM中的日期控件一样.
- 请公司有网站的朋友,谈谈托管用联通线路怎么样?
- 组合检索的问题!200分
- 自定义了一个类,直接引用cs文件可以,但生成dll文件就说找不到命名空间名称
- 请大家帮我重新编写下web.config伪静态,万分感谢
- javascript中如何判断is empty是否为false
- 有关postback
如在CS中
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
...
DropDownList dlSet = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("商品分类");
dlSet.DataSource = DataClass.SQLDataClass.DsSqlDataSet("select Name,ID from Abc");
dlSet.DataTextField = "Name";
dlSet.DataValueField = "ID";
dlSet.DataBind();
...
}
<asp:DropDownList ID="商品分类" runat="server" OnLoad="商品分类函数" DataSource='<%# Get商品分类() %>'> </asp:DropDownList>
</EditItemTemplate>绑定表达式中使用一个protected的函数返回数据集合。同时还可以:1. 可以在绑定表达式使用 Eval 函数使得 DropdownList的获取数据源函数跟行数据有关。
2. 如果DropdownList的数据源需要访问数据库,应该使用数据Cache,相同的查询不应该重复访问数据库。
假设 商品分类的类为 ProductType ,属性为 Id 和 Name
<ItemTemplate>
<asp:Label ID="lblPTName" runat="server" Text=' <%#Eval("ProductType.Name") %>' >
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlProductType" runat="server" DataSourceID="odsProductType"
DataTextField="Name" DataValueField="Id">
</asp:DropDownList>
<asp:ObjectDataSource ID="odsProductType" runat="server"
SelectMethod="GetProductTypeAll" TypeName="BLL.ProductTypeManager">
</asp:ObjectDataSource>
</EditItemTemplate>
显示的时候就能读出 ProductType的 Name.
而在更新模板里,用DropDownList 从业务逻辑层查询所有商品分类的方法读出所有ProductType,设置显示的是Name,值是Id在CS中
protected void GridView1_RowUpdating(object sender, GridViewEditEventArgs e)
{
DropDownList ddl = this.DetailsView1.FindControl("ddlProductType") as DropDownList;
this.odsProduct.UpdateParameters.Add("ptid", ddl.SelectedValue);//吧选中的商品分类的Id加入更新参数
}
考虑就加个AJ吧
<asp:DropDownList ID="ddlSort" runat="server" Width="98%">
</asp:DropDownList>
<asp:HiddenField ID="Hd_Sort" runat="server" Value=' <%# Eval("BalSort")%>' />
</ItemTemplate>
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex != -1)
{ if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit))
{
((DropDownList)e.Row.FindControl("ddlSort")).SelectedValue = ((HiddenField)e.Row.FindControl("Hd_Sort")).Value;
}
}
} protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
gv.EditIndex = e.NewEditIndex;
string strSort = ((DropDownList)gv.Rows[e.NewEditIndex].FindControl("ddlSort")).SelectedValue.Trim();
gv.EditIndex = -1;
BindData();
}
问题再说一下1、有一个商品的表 以及 商品类别的表,商品表中有商品类别的编号;数据库有一个查看商品的存储过程,可以查看商品的详细信息,SELECT * from 商品 inner JOIN 商品类别 ON 商品.商品类别编号=商品类别.商品类别编号;
2、商品管理中,在编辑状态下,想把商品类别这一列转变为下拉菜单,这里我做了一个是按照层次列出的,编辑状态下的商品类别数据源是在后台文件中添加进去的;供选择;
3、目前我用的是模板列,
目前我需要进行数据更新,如何得到选择的下拉菜单中商品分类的值,目前我一点更新,下拉菜单中数据全消失,并且还是处在编辑状态
前台文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="商品管理.aspx.cs" Inherits="汇通玩具网站.admin.商城.商品管理" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>商品管理</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
onrowediting="GridView1_RowEditing"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowupdating="GridView1_RowUpdating">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="商品编号" DataFormatString="{0:d}" HeaderText="商品编号" />
<asp:TemplateField HeaderText="商品类别">
<EditItemTemplate>
<asp:DropDownList ID="商品分类" runat="server"></asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="商品类别名称" runat="server" Text='<%#Eval("商品类别名称") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="商品名称" HeaderText="商品名称" />
<asp:ImageField DataImageUrlField="商品小图地址" HeaderText="商品小图">
</asp:ImageField>
<asp:ImageField DataImageUrlField="商品大图地址" HeaderText="商品大图">
</asp:ImageField>
<asp:BoundField DataField="商品规格" HeaderText="商品规格" />
<asp:BoundField DataField="商品面料" HeaderText="商品面料" />
<asp:BoundField DataField="商品A价" DataFormatString="{0:c}" HeaderText="商品A价" />
<asp:BoundField DataField="商品B价" DataFormatString="{0:c}" HeaderText="商品B价" />
<asp:CheckBoxField DataField="是否精品" HeaderText="是否精品" /> </Columns>
</asp:GridView>
</div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</form>
</body>
</html>后台文件:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using 商城;namespace 汇通玩具网站.admin.商城
{
public partial class 商品管理 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
管理商品();
} protected void 管理商品()
{
商品 商品1 = new 商品();
商品1.数据库连接字符串 = ConfigurationManager.ConnectionStrings["汇通玩具网站ConnectionString"].ToString();
商品1.管理商品存储过程名 = "管理商品存储过程"; GridView1.DataSource = 商品1.管理商品();
GridView1.DataBind();
} protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
//管理商品();
商品 商品1 = new 商品();
商品1.数据库连接字符串 = ConfigurationManager.ConnectionStrings["汇通玩具网站ConnectionString"].ToString();
商品1.管理商品存储过程名 = "管理商品存储过程"; GridView1.DataSource = 商品1.管理商品();
GridView1.DataBind(); DropDownList 商品分类 = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("商品分类");
//TextBox 商品名称 = (TextBox)GridView1.Rows[GridView1.EditIndex].FindControl("商品名称");
//GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0].Visible = false;
//GridView1.Rows[GridView1.EditIndex].Cells[6].Controls[0].Visible = false;
//((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[2].Controls[0]).ReadOnly = true; //GridView1.Rows[GridView1.EditIndex].Cells[3].Controls.Clear();
/*
DropDownList 商品分类 = new DropDownList();
商品分类.ID = "商品分类";
*/
商品分类.AutoPostBack = true;
商品分类.EnableViewState = true;
商品分类.SelectedIndexChanged += new EventHandler(商品分类_SelectedIndexChanged);
商品类别 商品类别1 = new 商品类别();
商品类别1.数据库连接字符串 = ConfigurationManager.ConnectionStrings["汇通玩具网站ConnectionString"].ToString();
商品类别1.列出第一级商品类别存储过程名 = "列出第一级商品类别存储过程";
商品类别1.列出该级下的商品类别存储过程名 = "列出该级下的商品类别存储过程";
商品分类.DataSource = 商品类别1.列出所有商品类别();
商品分类.DataTextField = "商品类别名称";
商品分类.DataValueField = "商品类别编号";
商品分类.DataBind();
商品类别1.清空输出表();
/*
GridView1.Rows[GridView1.EditIndex].Cells[5].Controls.Clear();
GridView1.Rows[GridView1.EditIndex].Cells[6].Controls.Clear(); GridView1.Rows[GridView1.EditIndex].Cells[3].Controls.Add(商品分类); //GridView1.Rows[GridView1.EditIndex].Cells[6].Style=;
FileUpload 小图上传 = new FileUpload();
小图上传.EnableViewState = true;
FileUpload 大图上传 = new FileUpload();
大图上传.EnableViewState = true;
//大图上传.Width = 120;
//大图上传.Height = 30;
GridView1.Rows[GridView1.EditIndex].Cells[5].Controls.Add(小图上传);
GridView1.Rows[GridView1.EditIndex].Cells[6].Controls.Add(大图上传);
//GridView1.Rows[GridView1.EditIndex].Cells[6].ControlStyle.Height = Unit.Pixel(10);
//大图上传.Height = 30;
//Label1.Text = ((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[6].Controls[0]).Text;
// GridView1.Rows[GridView1.EditIndex].Cells[6].Controls[0].SkinID.
*/
} protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
管理商品();
} protected void Button1_Click(object sender, EventArgs e)
{
}
protected void 商品分类函数(object sender, EventArgs e)
{
Label1.Text = "1111";
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DropDownList 商品分类 = (DropDownList)GridView1.FindControl("商品分类");
Label1.Text=商品分类.SelectedValue.ToString();
//Label1.Text = GridView1.Rows[e.RowIndex].Cells[8].Text;
//管理商品();
}
protected void 商品分类_SelectedIndexChanged(object sender, EventArgs e)
{ DropDownList 商品分类 = (DropDownList)sender; Label1.Text = 商品分类.SelectedItem.ToString();
}
}
}编辑时:
点更新时: