GridView+TextBox综合应用

zerobegin_8 2011-07-31 06:02:28
为了实现在网页上像在Excel一样录入似地,对应的Excel表如下:

用GridView和Textbox模拟实现。

对应的数据库中的表(KH_Manger)结构为:BH(编号)、NF(年份)、GZMC(现任职务)、XM(姓名)、KHR(考核人)、Yi(1月)、Er(2月)、San(3月)、Si(4月)、Wu(5月)、Liu(6月)、Qi(7月)、Ba(8月)、Jiu(9月)、Shi(10月)、ShiYi(11月)、ShiEr(12月)、PJF(平均分)、DF(得分)、BZ(备注)。

工作流程,实例说明:
第一步:2012年1月份,在页面的Textbox上输入2012(其实Textbox默认是本年,2011),点击查看按钮。这时根据时间“2012”从“(KH_Manger)”检查看有没有记录。如果没有,那么从档案表中查询一批人(档案表“KH_DOC”只需要有“GZMC(现任职务)、XM(姓名)、KHLB(考核类别)”三个字段),查询的条件是“KHLB(考核类别)”是“总/副经理”。然后将查询出的结果集绑定到GridView上,注意这时GridVIew上只绑定了两列(现任职务和姓名),其它字段显示为“无”。
另外,GridView的第一列是自增的,从“001”~“XXX”,GirdView第四列考核人要用户添写,然后用户再在GridVIew第五列中写入1月份的数据。同时对填入的数据进行格式判断,必须是0~100的数字,因为是分值。
最后点击存储,将GridView中的数据增加到“KH_Manger”表中(这时还没有“2012年”的数据)。

第二步:到了2012年2月,在页面的Textbox上输入2012(其实Textbox默认是本年,2011),点击查看按钮。这时根据时间“2012”从“(KH_Manger)”检查看有没有记录。如果有,取出这些记录并将它们绑定到GridView上,显示在Textbox里。这时可以修改1月份的得分,同时也可以填写2月份的得分,然后将数据存储到“KH_Manger”表中(这时是更新操作了)。

第三步:其实在点击“存储”按钮时,要根据前面12月的分数,计算出“平均分”和“得分”,得分=平均分*系数(系数为“0.2”)。当然,显示为“无”的就不用计算。

第四步:查看。用户选择年份,可以查看改年的得分记录。

要特别注意的地方:
1、两个不同结构的Dt绑定到同一个GridView。不过它们的字段名称相同,只不过一个多,一个少。
2、GridView第一列自增。
3、Textbox中输入的数值的判断。
4、数据存储,而且还要计算下。

感谢帮忙,不甚感激。求Demo,思路。
...全文
629 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
子夜__ 2011-08-01
  • 打赏
  • 举报
回复
简单化了些

前台
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="VSG.Web._Default" %>

<!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>.
<style type="text/css">
body
{
font-size: 12px;
text-align: center;
}
.TextBox
{
border-right: #ffffff 0px solid;
border-top: #ffffff 0px solid;
font-size: 9pt;
border-left: #ffffff 0px solid;
border-bottom: #c0c0c0 1px solid;
background-color: #ffffff;
}
table.gridview_m
{
border-collapse: collapse;
border: solid 1px #93c2f1;
width: 98%;
font-size: 10pt;
}
table.gridview_m td, th
{
border-collapse: collapse;
border: solid 1px #ffffff;
font-size: 10pt;
}
table.gridview_m1
{
border-collapse: collapse;
border: solid 1px #93c2f1;
width: 98%;
font-size: 10pt;
}
table.gridview_m1 td1, th1
{
border-collapse: collapse;
border: solid 1px #93c2f1;
font-size: 10pt;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: center">
<asp:GridView ID="Gv1" runat="server" AutoGenerateColumns="False" Height="1px" OnRowDeleting="Gv1_RowDeleting"
CssClass="gridview_m1">
<RowStyle HorizontalAlign="Center" VerticalAlign="Middle" />
<Columns>
<asp:TemplateField HeaderText="编号">
<ItemTemplate>
<%# Container.DataItemIndex+1 %>
<asp:Label ID="Lb_Index" runat="server" Text='<%# Container.DataItemIndex+1 %>' Visible="false"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="现任职务">
<ItemTemplate>
<asp:TextBox ID="Txt_Cposition" runat="server" Text='<%#Eval("Cposition")%>'
CssClass="TextBox"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="姓名">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("UserName")%>' CssClass="TextBox"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="一月份">
<ItemTemplate>
<asp:TextBox ID="Txt_Jan" runat="server" Text='<%#Eval("JanCount")%>' CssClass="TextBox"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="二月份">
<ItemTemplate>
<asp:TextBox ID="Txt_Feb" runat="server" Text='<%#Eval("FebCount")%>' CssClass="TextBox"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="删除">
<ItemTemplate>
<asp:LinkButton ID="Lkb_delete" runat="server" CommandName="delete" Text="删除" CommandArgument='<%# Container.DataItemIndex+1 %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<p>
 </p>
<p>
职务:<asp:TextBox ID="txt_Cp" runat="server" CssClass="TextBox"></asp:TextBox></p>
<p>
姓名:<asp:TextBox ID="txt_Un" runat="server" CssClass="TextBox"></asp:TextBox></p>
<p>
一月:<asp:TextBox ID="txt_Jn" runat="server" CssClass="TextBox"></asp:TextBox></p>
<p>
二月:<asp:TextBox ID="txt_Fb" runat="server" CssClass="TextBox"></asp:TextBox></p>
<p>
<asp:Button ID="Btn_Add" runat="server" OnClick="Btn_Add_Click" Text="添加" />
</p>
</div>
</form>
</body>
</html>

后台
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Data;
using System.Collections;

namespace VSG.Web
{
public partial class _Default : System.Web.UI.Page
{
Hashtable ht = new Hashtable();//记录ID和索引
DataTable Data = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{

if (ViewState["Data"] != null)
{
GridViewBind(this.Gv1, ViewState["Data"] as DataTable);
}
else
{

Data.Columns.Add("Cposition");
Data.Columns.Add("UserName");
Data.Columns.Add("JanCount");
Data.Columns.Add("FebCount");
Data.Rows.Add(new object[] { "卑鄙副总工程师", "张1", "98", "94" });
Data.Rows.Add(new object[] { "矿建副总工程师", "张2", "99", "94" });
Data.Rows.Add(new object[] { "机电副总工程师", "张3", "95", "93" });
Data.Rows.Add(new object[] { "基建副总工程师", "张4", "93", "91" });
GridViewBind(this.Gv1, Data);
ViewState["Data"] = Data;
}

Data = ViewState["Data"] as DataTable;
if (Data.Rows.Count > 0)
{
for (int i = 0; i < Data.Rows.Count; i++)
{
//这里应该存一个唯一键 来记录索引
//添加这个索引是为了后面删除和更新很方便的找到
ht.Add(i + 1, i);
}
}
}


protected void Gv1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//如果不为空就取出来
if (ViewState["Data"] != null)
{
Data = ViewState["Data"] as DataTable;
}
//取当前行ID
int id = Convert.ToInt32((this.Gv1.Rows[e.RowIndex].FindControl("Lkb_delete") as LinkButton).CommandArgument);
//匹配索引
int index = Convert.ToInt32(ht[id]);
//移除行
this.Data.Rows.RemoveAt(index);
//绑定数据
GridViewBind(this.Gv1, Data);
//保存数据
ViewState["Data"] = Data;

}
protected void Btn_Add_Click(object sender, EventArgs e)
{
//先取出ViewState["Data"]是否为空.
if (ViewState["Data"] != null)
{
Data = ViewState["Data"] as DataTable;
}
else
{
Data = CreateTable(0);
}
Data.Rows.Add(new object[] { this.txt_Cp.Text, this.txt_Un.Text, this.txt_Jn.Text, this.txt_Fb.Text });//添加行
GridViewBind(this.Gv1, Data);//绑定
//同时加入ViewState["Data"]
ViewState["Data"] = Data;
}

/// <summary>
/// 空行数
/// </summary>
/// <param name="Count"></param>
/// <returns></returns>
private DataTable CreateTable(int Count)
{
DataTable Data = new DataTable();
Data.Columns.Add("Cposition");
Data.Columns.Add("UserName");
Data.Columns.Add("JanCount");
Data.Columns.Add("FebCount");
if (Count > 0)
{
for (int i = 0; i < Count; i++)
{
Data.Rows.Add(new object[] { "", "", "", "" });
}
}
return Data;
}

private void GridViewBind(GridView GV, DataTable dt)
{
if (dt.Rows.Count != 0)
{
GV.DataSource = dt;
}
else
{
GV.DataSource = null;
GV.EmptyDataText = "没有可以显示的数据";
}
GV.DataBind();
}
}
}

cxs99999 2011-08-01
  • 打赏
  • 举报
回复
我记得C1或者哪个第三方有这个 忘了~~
xuan.ye 2011-08-01
  • 打赏
  • 举报
回复
smartgrid http://www.sinos.com.cn/demo/smartgrid/index.htm

sswp7 2011-08-01
  • 打赏
  • 举报
回复
LZ这样试试:
<asp:GridView ID="GridView1" runat="server" CssClass="GridView" DataKeyNames="SFZ" AutoGenerateColumns="False" AllowPaging="True" CellPadding="4"
ForeColor="#333333" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="编号">
<ItemTemplate>
<%# Container.DataItemIndex+1 %>
<asp:Label ID="Lb_Index" runat="server" Text='<%# Container.DataItemIndex+1 %>' Visible="false" Width="50"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="现任职务">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("GZMC")%>' CssClass="GVTB" Width="100"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="姓名">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("XM")%>' CssClass="GVTB" Width="50"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="考核人">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("KHR")%>' CssClass="GVTB" Width="50"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="1月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Yi")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="2月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Er")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="3月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("San")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="4月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Si")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="5月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Wu")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="6月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Liu")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="7月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Qi")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="8月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Ba")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="9月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Jiu")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="10月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("Shi")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="11月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("ShiYi")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="12月">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("ShiEr")%>' CssClass="GVTB" Width="20"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="平均分">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("PJF")%>' CssClass="GVTB" Width="50"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="得分">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("DF")%>' CssClass="GVTB" Width="30"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="备注">
<ItemTemplate>
<asp:TextBox ID="Txt_UserName" runat="server" Text='<%#Eval("BZ")%>' CssClass="GVTB" Width="150"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" Height="25px"/>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditRowStyle BackColor="#999999" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" Height="25px"/>
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
q107770540 2011-07-31
  • 打赏
  • 举报
回复
使用模板列

研究一下 GRIDVIEW 72变

http://blog.csdn.net/21aspnet/article/details/1540301
sswp7 2011-07-31
  • 打赏
  • 举报
回复
整合思路,优化。
zhlin118 2011-07-31
  • 打赏
  • 举报
回复
这是个体力活啊。。。

62,046

社区成员

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

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

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

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