AJAX 类似电子表格的功能实现---(续采购授权系统)

本文介绍了一个仿Excel的表格编辑功能实现方法,通过设置GridView控件使得用户即使在数据为空的情况下也能进行编辑操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我完成的小系统中存在很多设计疑问,希望大家可以回复我上一篇的几点疑问。

现在我给大家分享的是类似电子表格的实现。其实就是一个小技巧了。小弟也是到处看,才写出的一个小功能。
其实我并不想那么做,但是用户就必须那样,我没有办法,客户,就是那么的要求。

下面我正式介绍:
1:需求背景
怎么说呢?你可以这样想。你的客户以前是用Excel的,那EXCEL其实就是一张总情况报告。现在BOSS不干了,说你们怎么就给我一张报表呢?你们历史记录我怎么看呢。张三,你1月做了什么?(张三: 啊,我不记得了。干得事情太多了)这样这个系统需求就产生了。我就是说了一个方面,其实好处还不是这样的......

2:用户要求的操作界面
用户A:我以前就是用EXCEL操作的,我现在还要和EXCEL一样。其它的我不干。你不能让我选来选去的。我很忙的。
用户B:我的记录其实和用户A有一定的逻辑关系在里面的,但是情况又不一定,有时间开会来决定。
BOSS: 你进去就给我看到所有的东西,我想点哪里就哪里,我想修改就修改,我想增加就增加,你不要让我到处跑,到处选,我不干。不允许你分页,那样我看得不方便,不要你给我查询,我不想选。选来选去多麻烦。
开发人员:我答应你们(),老板慢你不要怪我哦。以后不能扩展你不能怪我哦。你的手下,用起来不舒服你不要怪我哦。总之你不能怪我哦。

开始工作,开发人员争取到30天时间,来开始系统。BOSS说,其实你这个5天就可以完成了。

不说废话了,对不起,下面正式
效果描述
1:点击GridView中任何地方都可以新增修改效果和EXCEL操作一样

GridView1
 1  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound"
 2                    CssClass="myGridView" BorderStyle="None" CellPadding="4" CellSpacing="1" HorizontalAlign="Center"
 3                    DataKeyNames="ModelID,MaterialID,ModelName,MaterialName,TotalAuthAmt,CurrentMonthQues,NextMonthQues,CurrTracing,task,Person,ReplyID"
 4                    Width="95%">
 5                    <Columns>
 6                        <asp:TemplateField HeaderText="機型">
 7                            <ItemTemplate>
 8                                <asp:LinkButton ID="linkModelName" runat="server" CausesValidation="false" OnClick="btnEdit_Click"
 9                                    ToolTip="點击新增材料"><%#Eval("ModelName")%></asp:LinkButton>
10                            </ItemTemplate>
11                            <ItemStyle HorizontalAlign="Left" />
12                            <HeaderStyle Width="10%" />
13                        </asp:TemplateField>
14                        <asp:BoundField DataField="MaterialName" HeaderText="材料" ReadOnly="True">
15                            <ItemStyle Width="8%" />
16                        </asp:BoundField>
17                        <asp:TemplateField HeaderText="成套數">
18                            <ItemStyle Width="8%" />
19                            <ItemTemplate>
20                                <asp:LinkButton ID="linkTotalAmt" runat="server" CausesValidation="false" OnClick="btnEdit1_Click"><%#Eval("TotalAuthAmt")%></asp:LinkButton>
21                            </ItemTemplate>
22                        </asp:TemplateField>
23                        <asp:TemplateField>
24                            <ItemStyle Width="15%" />
25                            <ItemTemplate>
26                                <asp:LinkButton ID="linkCurrQues" runat="server" CausesValidation="false" OnClick="btnEdit1_Click"><%#Eval("CurrentMonthQues")%></asp:LinkButton>
27                            </ItemTemplate>
28                        </asp:TemplateField>
29                        <asp:TemplateField>
30                            <ItemStyle Width="15%" />
31                            <ItemTemplate>
32                                <asp:LinkButton ID="linkNextQues" runat="server" CausesValidation="false" OnClick="btnEdit1_Click"><%#Eval("NextMonthQues")%></asp:LinkButton>
33                            </ItemTemplate>
34                        </asp:TemplateField>
35                        <asp:TemplateField HeaderText="方案追蹤">
36                            <ItemStyle Width="15%" />
37                            <ItemTemplate>
38                                <asp:LinkButton ID="linkCurrTracing" runat="server" CausesValidation="false" OnClick="btnEdit1_Click"><%#Eval("CurrTracing")%></asp:LinkButton>
39                            </ItemTemplate>
40                        </asp:TemplateField>
41                        <asp:TemplateField HeaderText="交期">
42                            <ItemTemplate>
43                                <asp:LinkButton ID="linktask" runat="server" CausesValidation="false" OnClick="btnEdit1_Click"><%#Eval("task")%></asp:LinkButton>
44                            </ItemTemplate>
45                            <ItemStyle HorizontalAlign="Left" Width="15%" />
46                        </asp:TemplateField>
47                        <asp:TemplateField HeaderText="採購">
48                            <ItemStyle Width="10%" />
49                            <ItemTemplate>
50                                <asp:LinkButton ID="linkPersonDeal" runat="server" CausesValidation="false" OnClick="btnEdit1_Click"><%#Eval("Person")%></asp:LinkButton>
51                            </ItemTemplate>
52                        </asp:TemplateField>
53                    </Columns>
54                    <HeaderStyle BackColor="#EFEFEF" BorderColor="#999999" />
55                    <EmptyDataTemplate>
56                        <font color="red"><b>對不起,該機型沒有數據!</b></font>
57                    </EmptyDataTemplate>
58                </asp:GridView>

不用说LinkButton是有记录的时候用户可以直接编辑。但是当没有数据的时候呢,那么就是一片空白。你怎么编辑呢?

(开始时,开发人员:老板我放一个图片还可以啊?不行,那么我放个白图片呢?不行,我不想看到任何东西!还好万能的google救了我)

解决方案:给单元格数据为空的一段JS代码。
注意:  string js1 = this.Page.ClientScript.GetPostBackClientHyperlink(linkCurrQues, "");
可以取到原来LinkButton PostBack的JS

代码不好看,大家不要批评
后台代码:
GridView1_RowDataBound
  1  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  2    {
  3        string currentMonth = DateTime.Now.ToString("yyyy-MM-01", DateTimeFormatInfo.InvariantInfo);
  4        if (e.Row.RowType == DataControlRowType.Header)
  5        {
  6            e.Row.Cells[3].Text = Convert.ToDateTime(currentMonth).Month.ToString() + " 月問題點";
  7            e.Row.Cells[4].Text = Convert.ToDateTime(currentMonth).AddMonths(1).Month.ToString() + " 月問題點";
  8        }

  9        int rowindex = e.Row.RowIndex;
 10        if (rowindex != -1)
 11        {
 12            if (e.Row.RowType == DataControlRowType.DataRow)
 13            {
 14                LinkButton linktask = (LinkButton)e.Row.FindControl("linktask");
 15                LinkButton linkCurrQues = (LinkButton)e.Row.FindControl("linkCurrQues");
 16                LinkButton linkNextQues = (LinkButton)e.Row.FindControl("linkNextQues");
 17                LinkButton linkCurrTracing = (LinkButton)e.Row.FindControl("linkCurrTracing");
 18                LinkButton linkPersonDeal = (LinkButton)e.Row.FindControl("linkPersonDeal");
 19                if ((GridView1.DataKeys[e.Row.RowIndex]["CurrentMonthQues"].ToString().Trim() == string.Empty) && (GridView1.DataKeys[e.Row.RowIndex][3].ToString().Trim() != string.Empty))
 20                {
 21
 22                    string js1 = this.Page.ClientScript.GetPostBackClientHyperlink(linkCurrQues, "");
 23                    e.Row.Cells[3].Attributes.Add("onClick""Javascript:" + js1 + ";");
 24                    e.Row.Cells[3].Attributes.Add("onmouseover""javerscript:this.style.cursor='hand';this.style.backgroundColor='#c8e3ff';");
 25                    e.Row.Cells[3].Attributes.Add("onmouseout""this.style.backgroundColor='#FFFFFF'");
 26                    e.Row.Cells[3].ToolTip = "點击單元格對" + Convert.ToDateTime(currentMonth).Month.ToString() + " 月問題點進行修改";
 27
 28                }

 29
 30                if ((GridView1.DataKeys[e.Row.RowIndex]["NextMonthQues"].ToString().Trim() == string.Empty) && (GridView1.DataKeys[e.Row.RowIndex][3].ToString().Trim() != string.Empty))
 31                {
 32                    string js2 = this.Page.ClientScript.GetPostBackClientHyperlink(linkNextQues, "");
 33                    e.Row.Cells[4].Attributes.Add("onClick""Javascript:" + js2 + ";");
 34                    e.Row.Cells[4].Attributes.Add("onmouseover""javerscript:this.style.cursor='hand';this.style.backgroundColor='#c8e3ff';");
 35                    e.Row.Cells[4].Attributes.Add("onmouseout""this.style.backgroundColor='#FFFFFF'");
 36                    e.Row.Cells[4].ToolTip = "點击單元格對" + Convert.ToDateTime(currentMonth).AddMonths(1).Month.ToString() + " 月問題點進行修改";
 37                }

 38
 39                if ((GridView1.DataKeys[e.Row.RowIndex]["CurrTracing"].ToString().Trim() == string.Empty) && (GridView1.DataKeys[e.Row.RowIndex][3].ToString().Trim() != string.Empty))
 40                {
 41                    string js3 = this.Page.ClientScript.GetPostBackClientHyperlink(linkCurrTracing, "");
 42                    e.Row.Cells[5].Attributes.Add("onClick""Javascript:" + js3 + ";");
 43                    e.Row.Cells[5].Attributes.Add("onmouseover""javerscript:this.style.cursor='hand';this.style.backgroundColor='#c8e3ff';");
 44                    e.Row.Cells[5].Attributes.Add("onmouseout""this.style.backgroundColor='#FFFFFF'");
 45                    e.Row.Cells[5].ToolTip = "點击單元格對方案追蹤進行修改";
 46                }

 47
 48                if ((GridView1.DataKeys[e.Row.RowIndex]["task"].ToString().Trim() == string.Empty) && (GridView1.DataKeys[e.Row.RowIndex][3].ToString().Trim() != string.Empty))
 49                {
 50                    string js4 = this.Page.ClientScript.GetPostBackClientHyperlink(linktask, "");
 51                    e.Row.Cells[6].Attributes.Add("onClick""Javascript:" + js4 + ";");
 52                    e.Row.Cells[6].Attributes.Add("onmouseover""javerscript:this.style.cursor='hand';this.style.backgroundColor='#c8e3ff';");
 53                    e.Row.Cells[6].Attributes.Add("onmouseout""this.style.backgroundColor='#FFFFFF'");
 54                    e.Row.Cells[6].ToolTip = "點击單元格對交期進行修改";
 55                }

 56
 57                if ((GridView1.DataKeys[e.Row.RowIndex]["Person"].ToString().Trim() == string.Empty) && (GridView1.DataKeys[e.Row.RowIndex][3].ToString().Trim() != string.Empty))
 58                {
 59                    string js5 = this.Page.ClientScript.GetPostBackClientHyperlink(linkPersonDeal, "");
 60                    e.Row.Cells[7].Attributes.Add("onClick""Javascript:" + js5 + ";");
 61                    e.Row.Cells[7].Attributes.Add("onmouseover""javerscript:this.style.cursor='hand';this.style.backgroundColor='#c8e3ff';");
 62                    e.Row.Cells[7].Attributes.Add("onmouseout""this.style.backgroundColor='#FFFFFF'");
 63                    e.Row.Cells[7].ToolTip = "點击單元格對採購進行修改";
 64                }

 65            }

 66        }

 67
 68        if (rowindex - 1 < 0)
 69        {
 70            if (rowindex == 0)
 71            {
 72                if (GridView1.DataKeys[e.Row.RowIndex][3].ToString() == string.Empty)
 73                {
 74                    e.Row.Cells[2].Text = string.Empty;
 75                    e.Row.Cells[3].Text = string.Empty;
 76                    e.Row.Cells[4].Text = string.Empty;
 77                    e.Row.Cells[5].Text = string.Empty;
 78                    e.Row.Cells[6].Text = string.Empty;
 79                    e.Row.Cells[7].Text = string.Empty;
 80                }

 81                return;
 82            }

 83            return;
 84        }

 85
 86        if (GridView1.DataKeys[e.Row.RowIndex][3].ToString() == string.Empty)
 87        {
 88            e.Row.Cells[2].Text = string.Empty;
 89            e.Row.Cells[3].Text = string.Empty;
 90            e.Row.Cells[4].Text = string.Empty;
 91            e.Row.Cells[5].Text = string.Empty;
 92            e.Row.Cells[6].Text = string.Empty;
 93            e.Row.Cells[7].Text = string.Empty;
 94        }

 95
 96        if (GridView1.DataKeys[e.Row.RowIndex][0].ToString() == GridView1.DataKeys[e.Row.RowIndex - 1][0].ToString())
 97        {
 98            if (GridView1.Rows[row].Cells[0].RowSpan == 0)
 99                GridView1.Rows[row].Cells[0].RowSpan++;
100            GridView1.Rows[row].Cells[0].RowSpan++;
101            e.Row.Cells[0].Visible = false;
102        }

103        else
104        {
105            row = rowindex;
106        }

107    }

这样就完成了!
效果:




其实是很简单的东西,只不过我花了很多几天才完成。大家碰到这样的问题。可以和我讨论。

转载于:https://www.cnblogs.com/szbaby1221/archive/2008/01/14/1037933.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值