Gridview中Dropdownlist的刷新问题

hejunlr 2014-11-10 12:59:21
因为要动态增加行,所以上网找了好久,才找到神贴
http://www.cnblogs.com/psforever/archive/2011/02/23/1963207.html
但是因为我这里面要用到Dropdownlist,数据绑定没做起来,就做成了静态的ListItem,目前功能基本实现,但是每次增加行的时候,Dropdownlist内容又恢复原始状态,实在搞不定了,求教各位大神!
如果能帮小弟动态绑定Dropdownlist,感激不尽!

页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="zlgcSYS.WebForm1" %>

<!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 id="Head1" runat="server">
<title>GridView中实现动态动态增加删除行</title>
<style type="text/css">
.hide{
display:none;
}
</style>
<script type="text/javascript">
//选中所有行
function SelectAll(chkAll)
{
var gridview = document.getElementById("GridView1");
if (gridview)
{
//获取到GridView1中的所有input标签
var inputs = gridview.getElementsByTagName("input");
for(var i=0;i<inputs.length;i++)
{
if (inputs[i].type=="checkbox")
{
//设置所有checkbox的选中状态与chkAll一致
inputs[i].checked = chkAll.checked;
}
}
}
}

//给选中行换背景色
function checkRow(chkRow)
{
var row = chkRow.parentNode.parentNode;
if(row)
{
if (chkRow.checked)
row.style.backgroundColor="#7799CC";
else
row.style.backgroundColor="#FFFFFF";
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LinkButton ID="lbtnAddRow" runat="server" Width="80px" OnClick="lbtnAddRow_Click">添加行</asp:LinkButton>
<asp:LinkButton ID="btnDeleteRow" runat="server" OnClick="btnDeleteRow_Click" OnClientClick="return confirm('确定要删除选中行吗?');">删除选中行</asp:LinkButton>
</div>
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333"
onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" >
<ItemStyle CssClass="hide" BorderColor="#507CD1" />
<HeaderStyle CssClass="hide" />
</asp:BoundField>
<asp:TemplateField HeaderText="序号">
<ItemTemplate>
<%# Container.DataItemIndex + 1%>
</ItemTemplate>
<ItemStyle BorderColor="#507CD1" HorizontalAlign="Center" BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
<input id="chkAll" type="checkbox" onclick="SelectAll(this)" />
</HeaderTemplate>
<ItemTemplate>
<input id="chkRow" type="checkbox" onclick="checkRow(this);" runat="server" />
</ItemTemplate>
<ItemStyle Width="30px" HorizontalAlign="Center" BorderColor="#507CD1" BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="经费项目">
<ItemTemplate>
<asp:DropDownList ID="ddlxm" runat="server" AutoPostBack="True">
<asp:ListItem>调研差旅费</asp:ListItem>
<asp:ListItem>管理费</asp:ListItem>
<asp:ListItem>会议费</asp:ListItem>
<asp:ListItem>劳务费</asp:ListItem>
<asp:ListItem>设备购置和使用费</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
<ItemStyle Width="100px" BorderColor="#507CD1" BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="经济科目">
<ItemTemplate>
<asp:DropDownList ID="ddlkm" runat="server" AutoPostBack="True">
<asp:ListItem>印刷费</asp:ListItem>
<asp:ListItem>咨询费</asp:ListItem>
<asp:ListItem>劳务费</asp:ListItem>
<asp:ListItem>差旅费</asp:ListItem>
<asp:ListItem>邮电费</asp:ListItem>
<asp:ListItem>专用设备购置费</asp:ListItem>
<asp:ListItem>会议费</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
<ItemStyle Width="100px" BorderColor="#507CD1" BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="输入金额">
<ItemTemplate>
<asp:TextBox ID="txtje" runat="server" Text='<%# Bind("je") %>' BorderStyle="None"></asp:TextBox>
</ItemTemplate>
<ItemStyle Width="100px" BorderColor="#507CD1" BorderWidth="1px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="支出说明">
<ItemTemplate>
<asp:TextBox ID="txtsm" runat="server" Text='<%# Bind("sm") %>' BorderStyle="None"></asp:TextBox>
</ItemTemplate>
<ItemStyle Width="100px" BorderColor="#507CD1" BorderWidth="1px" />
</asp:TemplateField>
</Columns>
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
</asp:GridView>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</div>
</form>
</body>
</html>
...全文
292 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangweimutou 2014-11-12
  • 打赏
  • 举报
回复
xiao_2528276651 2014-11-11
  • 打赏
  • 举报
回复
GridView中嵌套Dropdownlist商品预售查询刷新示例 //GridView设置查询刷新商品信息 查找产品的关键字:<asp:TextBox ID="tbSearch" runat="server"></asp:TextBox> <asp:Button ID="btnSearch" runat="server" Text="搜索" Width="44px" onclick="btnSearch_Click" /> <asp:Button ID="btnReturn" runat="server" onclick="btnReturn_Click" Text="返回" /> <div> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2" DataKeyNames="产品编号" ShowFooter="True" Width="642px" OnRowCreated="GridView1_RowCreated" OnRowDataBound="GridView1_RowDataBound" onpageindexchanging="GridView1_PageIndexChanging" PageSize="5" onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating" style="font-size: small"> <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> <Columns> <asp:TemplateField HeaderText="产品名称"> <ItemTemplate> <%#HightLightText((string)Eval("产品"), this.tbSearch.Text.Trim())%> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="单价" HeaderText="单价" SortExpression="单价" ReadOnly="True" /> <asp:BoundField DataField="库存量" HeaderText="库存量" SortExpression="库存量" ReadOnly="True" /> <asp:BoundField DataField="已订购量" HeaderText="已订购量" SortExpression="已订购量" ReadOnly="True" /> <asp:TemplateField HeaderText="订货金额" SortExpression="订货金额"> <EditItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("订货金额", "{0:c}") %>'></asp:Label> </EditItemTemplate> <FooterTemplate> <asp:Label ID="OrderTotalLabel" runat="server" Font-Underline="True" ForeColor="Red"></asp:Label> </FooterTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("订货金额", "{0:c}") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="是否停售"> <EditItemTemplate> <asp:DropDownList ID="ddlSellState" runat="server" AutoPostBack="True"> <asp:ListItem Value="True">停售</asp:ListItem> <asp:ListItem Value="False">不停售</asp:ListItem> </asp:DropDownList> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label4" runat="server" Text='<%# Eval("SellState") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:CommandField HeaderText="设置" ShowEditButton="True" /> </Columns> <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> <SelectedRowStyle BackColor="#C0FFC0" Font-Bold="True" ForeColor="Black" /> <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> </asp:GridView> // strKey为原始内容,keyworld为搜索的关键字 protected string HightLightText(string strKey, string keyworld) { if (keyworld == "")//如果查询关键字为空返回原内容 { return strKey; } string strReturn = strKey.Replace(keyworld, "<span class='highlightTxtSearch'>" + keyworld + "</span>"); return strReturn; } //查询关键字显示数据 protected void btnSearch_Click(object sender, EventArgs e) { string sqlstr = "select 产品编号, 产品, 单价, 库存量, 已订购量, 订单日期,单价 * 已订购量 AS 订货金额,CASE 是否停售 WHEN 'False' THEN '不停售' ELSE '停售' END AS SellState from tb_OrderForm where 产品 like '%" + tbSearch.Text + "%'"; sd.BindData(GridView1, sqlstr); } //GridView中嵌套:DropDownList设置数据 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { int ID=int.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString()); bool PaperState = bool.Parse(((DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddlSellState")).SelectedValue); string strsql = "UPDATE tb_OrderForm SET 是否停售 = @SellState WHERE 产品编号= @ID"; SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); conn.Open(); SqlCommand comm = new SqlCommand(strsql, conn); comm.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 4)); comm.Parameters["@ID"].Value = ID; comm.Parameters.Add(new SqlParameter("@SellState", SqlDbType.Bit, 1)); comm.Parameters["@SellState"].Value = PaperState; if (Convert.ToInt32(comm.ExecuteNonQuery()) > 0) { Response.Write("<script language=javascript>alert('设置成功!');location='Default.aspx'</script>"); } else { Response.Write("<script language=javascript>alert('设置失败!');location='Default.aspx'</script>"); } //取消编辑操作 GridView1.EditIndex = -1; //调用自定义方法DbBind()重新绑定GridView控件中信息 DbBind(); } //其他设置(略)
hejunlr 2014-11-10
  • 打赏
  • 举报
回复
后台代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
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.Data.OleDb;

namespace zlgcSYS
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataTable table = new DataTable();
                table.Columns.Add(new DataColumn("ID"));
                table.Columns.Add(new DataColumn("xm"));
                table.Columns.Add(new DataColumn("km"));
                table.Columns.Add(new DataColumn("je"));
                table.Columns.Add(new DataColumn("sm"));
                DataRow row = table.NewRow(); table.Rows.Add(row);
                GridView1.DataSource = table; GridView1.DataBind();
                //bind();
            }
        }
        protected void lbtnAddRow_Click(object sender, EventArgs e)
        {
            DataTable table = GetGridViewData();
            DataRow newRow = table.NewRow();
            newRow["ID"] = Guid.NewGuid().ToString();
            table.Rows.Add(newRow);
            GridView1.DataSource = table;
            GridView1.DataBind();
        }
        private DataTable GetGridViewData()
        {
            DataTable table = new DataTable();
            table.Columns.Add(new DataColumn("ID"));
            table.Columns.Add(new DataColumn("xm"));
            table.Columns.Add(new DataColumn("km"));
            table.Columns.Add(new DataColumn("je"));
            table.Columns.Add(new DataColumn("sm"));
            foreach (GridViewRow row in GridView1.Rows)
            {
                DataRow sourseRow = table.NewRow();
                sourseRow["ID"] = row.Cells[0].Text;
                sourseRow["xm"] = ((DropDownList)row.Cells[3].FindControl("ddlxm")).Text;
                sourseRow["km"] = ((DropDownList)row.Cells[4].FindControl("ddlkm")).Text;
                sourseRow["je"] = ((TextBox)row.Cells[5].FindControl("txtje")).Text;
                sourseRow["sm"] = ((TextBox)row.Cells[6].FindControl("txtsm")).Text;
                table.Rows.Add(sourseRow);
            }
            return table;
        }
        protected void btnDeleteRow_Click(object sender, EventArgs e)
        {
            DataTable table = GetGridViewData();
            foreach (GridViewRow row in GridView1.Rows)
            {
                if (((HtmlInputCheckBox)row.Cells[2].FindControl("chkRow")).Checked)
                {
                    foreach (DataRow dtRow in table.Rows)
                    {
                        if (dtRow["ID"].ToString() == row.Cells[0].Text)
                        {
                            table.Rows.Remove(dtRow);
                            break;
                        }
                    }
                }
            }
            GridView1.DataSource = table;
            GridView1.DataBind();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            DataTable myDt = new DataTable();
            myDt = GetGridViewData();
            myDt.PrimaryKey = new System.Data.DataColumn[] { myDt.Columns["Id"] };

            String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + System.Web.HttpContext.Current.Server.MapPath("App_Data/zlgc_Data.mdb");
            OleDbConnection conn = new OleDbConnection(connectionString);
            OleDbDataAdapter adapt = new OleDbDataAdapter();
            string sqlQuery = "insert into tb_Txinfo (xmId,xm,km,je,sm) values(@ID,@xm,@km,@je,@sm)";
            var cmd = new OleDbCommand(sqlQuery, conn);
            cmd.Parameters.Add("@xmId", OleDbType.Integer, 40, "ID");
            cmd.Parameters.Add("@xm", OleDbType.VarChar, 40, "xm");
            cmd.Parameters.Add("@km", OleDbType.VarChar, 20, "km");
            cmd.Parameters.Add("@je", OleDbType.Integer, 40, "je");
            cmd.Parameters.Add("@sm", OleDbType.VarChar, 40, "sm");
            adapt.InsertCommand = cmd;
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapt);
            builder.QuotePrefix = "[";
            builder.QuoteSuffix = "]";
            adapt.Update(myDt);
        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
        }

    }
}
hejunlr 2014-11-10
  • 打赏
  • 举报
回复
引用 8 楼 insus 的回复:
[quote=引用 5 楼 hejunlr 的回复:] 杨老师,您好,其实我一上午主要都在看您的 DropDownList在GridView编辑时联动选择 http://www.cnblogs.com/insus/articles/1411016.html#2053183 但是因为我用的是Access数据库,所以存储过程实现不了,您的文章里的效果应该更好! 可否将源码发给我参考下?
时隔太久,源码只能看那篇的评论的vb.net版本。[/quote] 好的,我再试试看吧!感谢您的指导!
insus 2014-11-10
  • 打赏
  • 举报
回复
引用 5 楼 hejunlr 的回复:
杨老师,您好,其实我一上午主要都在看您的 DropDownList在GridView编辑时联动选择 http://www.cnblogs.com/insus/articles/1411016.html#2053183 但是因为我用的是Access数据库,所以存储过程实现不了,您的文章里的效果应该更好! 可否将源码发给我参考下?
时隔太久,源码只能看那篇的评论的vb.net版本。
hejunlr 2014-11-10
  • 打赏
  • 举报
回复
引用 6 楼 insus 的回复:
或者你可以视每一行为一个对象,所有创建一行,就是创建一个对象,显示再显示此对象内容即可: http://www.cnblogs.com/insus/p/3247935.html
这种功能我已经达到了!只是想做的更完善一些!
insus 2014-11-10
  • 打赏
  • 举报
回复
或者你可以视每一行为一个对象,所有创建一行,就是创建一个对象,显示再显示此对象内容即可: http://www.cnblogs.com/insus/p/3247935.html
hejunlr 2014-11-10
  • 打赏
  • 举报
回复
杨老师,您好,其实我一上午主要都在看您的 DropDownList在GridView编辑时联动选择 http://www.cnblogs.com/insus/articles/1411016.html#2053183 但是因为我用的是Access数据库,所以存储过程实现不了,您的文章里的效果应该更好! 可否将源码发给我参考下?
insus 2014-11-10
  • 打赏
  • 举报
回复
insus 2014-11-10
  • 打赏
  • 举报
回复
如果先是把第一行做成一个用户控件,然后动态添加: http://www.cnblogs.com/insus/p/3148345.html
第7章 数据绑定控件 300 7.1 数据绑定技术 301 实例188 格式化订货金额和订单日期并 进行绑定 301 实例189 使用绑定表达式高亮显示搜索关键字 302 实例190 Eval()绑定图书图片并实现单击图片 进行链接 304 实例191 Eval()方法绑定日志并用“…”代替 超长内容 305 实例192 双向绑定Bind()方法实现更新最新 电影信息 306 实例193 绑定DataTable对象显示银行月利息 及本息 307 7.2 GridView控件基本应用 308 实例194 GridView数据绑定并实现自带 分页功能 308 实例195 实现选、编辑和删除GridView的 商品信息 310 实例196 供求信息网审核发布信息 (审核权限设置) 312 实例197 获取GridView控件隐藏的列值 314 实例198 在GridView控件实现商品信息 自动编号 315 实例199 GridView绑定数据为空时的界面设计 316 实例200 GridView强制换行显示论坛帖子的 详细信息 317 实例201 查看GridView当前行绑定的商品 详细信息 319 实例202 GridView复选框绑定列设置商品 是否上架 320 实例203 使用主题来设置GridView控件的外观 322 7.3 GridView控件72般绝技 323 实例204 实现搜索GridView多个关键字高亮 显示 323 实例205 高亮显示数据行并实现双击数据行 弹出新窗口 325 实例206 学生成绩不及格设置单元格突出显示 为红色 326 实例207 根据多个字段内容设置不同数据行的 背景色 327 实例208 自定义分页并结合下拉列表实现页次 切换 328 实例209 结合分页模板PagerTemplate实现 自定义分页 330 实例210 在GridView控件动态添加模板列 331 实例211 带上下箭头排序并实现查询数据为 空显示表头 334 实例212 GridView自动求和及合并多列多行 单元格 336 实例213 GridView合并行或列单元格的5种 通用方式 338 实例214 GridView删除数据时弹出确认对话框 (含内容提示) 340 实例215 GridView数据源为空时显示表头和 提示信息 341 实例216 创建表头固定、表体可滚动的 GridView控件 342 实例217 可拖动列、可排序、可改变宽度的 GridView控件 344 实例218 使用“…”优化GridView控件的 超长字符显示 345 实例219 一次性编辑GridView控件的所有行 的数据 347 实例220 嵌套DropDownList控件根据库存量 设置商品停售 348 实例221 嵌套CheckBox实现批量删除和更新 供求信息 349 实例222 结合CheckBox实现密码重置 (MD5加密) 351 实例223 结合哈希表设置在线考试后台管理 权限 353 实例224 嵌套GridView控件实现商品信息 明细表 354 实例225 将GridView控件的数据导出到Excel 并进行格式化 355 实例226 将Excel数据导入到Aceess 并绑定GridView 356 实例227 将GridView绑定的Access数据 生成XML 358 实例228 嵌套购物车(可增减商品数并显示 摘要信息) 359 实例229 使用LINQ实现GridView控件分页 功能 361 实例230 LINQ绑定GridView实现编辑和删除 数据 362 实例231 开发针对GridView自定义分页的用户 控件 364 7.4 灵活访问数据俊杰:DataList控件 365 实例232 分页绑定DataList数据并实现页面 跳转功能 365 实例233 开发针对DataList控件分页功能的 用户控件 368 实例234 使用DataList删除数据(支持批量 删除) 370 实例235 利用DataList控件智能化查看详细 信息 371 实例236 编辑绑定在DataList控件的商品 信息 373 实例237 利用嵌套DataList控件显示商品明细 信息 374 实例238 查找嵌套在DataList控件的多个 服务器控件 376 7.5 王牌现身:全新的ListView控件 377 实例239 以独立DataPager控件设置ListView 的分页 377 实例240 异步无刷新水平滚动照片 (AJAX+ListView) 379 实例241 编辑绑定在ListView的照片 (ADO.NET版) 380 实例242 编辑绑定在ListView的照片 (LINQ版) 382 实例243 高亮显示ListView的数据行并实现 图片自动变换 384

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧