zoukankan      html  css  js  c++  java
  • SharePoint 2010 电子表单之重复表

    一般来讲SharePoint的表单有三种方式

    1. Infopath表单的对应特定的列表(直接在列表中可以自定义列表,只适用特定列表)

    2. 复杂的表单,如需要重复表,且重复表的数据需用来统计

    3. Infopath: 新建一个Infopath,然后通过发布,激活,适应多个列表。

    下面是一个重复表的开发实例,如下图所示:

    下面是开发这种表单的常用代码:

    前台代码:

    复制代码
              <div style="padding-top: 10px;">
    
                    <asp:GridView ID="GridView1" AutoGenerateColumns="False" HeaderStyle-CssClass="GridHeader"
                        runat="server" RowStyle-CssClass="GridRow" Width="100%" onrowdatabound="GridView1_RowDataBound">
                        <Columns>
                            <asp:TemplateField HeaderText="请假类型">
                                <ItemTemplate>
                                    <asp:Label ID="lbID" runat="server" Visible="false"  Text='<%# Eval("ID")%>'></asp:Label>
                                      <asp:CheckBox ID="CheckBox1" Visible="false" runat="server" Checked='<%#Eval("New") %>'/>
                                    <asp:DropDownList ID="ddlQjlx" runat="server">
                                        <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:ListItem>丧假</asp:ListItem>
                                        <asp:ListItem>产假</asp:ListItem>
                                        <asp:ListItem>陪产假</asp:ListItem>
                                    </asp:DropDownList>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                                <HeaderStyle HorizontalAlign="Center"/>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="开始时间">
                                <ItemTemplate>
                                    <SharePoint:DateTimeControl ShowWeekNumber="true" HoursMode24="true" DateOnly="true"
                                        ID="dtStartTime" runat="server"></SharePoint:DateTimeControl>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" Width="120" />
                                <HeaderStyle HorizontalAlign="Center" />
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="结束时间">
                                <ItemTemplate>
                                    <SharePoint:DateTimeControl ShowWeekNumber="true" HoursMode24="true" DateOnly="true"
                                        ID="dtEndTime" runat="server"></SharePoint:DateTimeControl>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" Width="120" />
                                <HeaderStyle HorizontalAlign="Center" />
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="备注">
                                <ItemTemplate>
                                    <asp:TextBox ID="txtDemo" runat="server" Width="100%" Text='<%#Eval("Demo") %>'></asp:TextBox>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Left" />
                                <HeaderStyle HorizontalAlign="Center"   Width="100%"/>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="">
                                <ItemTemplate>
                                    <asp:Button ID="btnDelete" Text="删除" CssClass="btn" runat="server" OnClientClick="return confirm('是否要删除?');"
                                        OnClick="btnDelete_Click"  />
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center" />
                                <HeaderStyle HorizontalAlign="Center" Width="100" />
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </div>
                        <div style="padding-bottom: 6px; text-align:left; display:block; 100%; padding-top:6px;">
                <asp:Button ID="btnAdd" runat="server" Text="增加" CssClass="btn1" OnClick="btnAdd_Click"/></div>
    复制代码

    会用到的后台代码:

    PageLoad最重要的业务逻辑

    复制代码
    protected void Page_Load(object sender, EventArgs e)
        {
    
            if (!Page.IsPostBack)
            {
                string sID = Request["ID"];
                if (!string.IsNullOrEmpty(Request["action"]) && Request["action"].ToString().Equals("select"))
                {
                    //这是视图,IFrame模式
                    txtBumen.Enabled = false;
                    txtZhiwei.Enabled = false;
                    btnAdd.Visible = false;
                    btnClose.Visible = false;
                    btnSave.Visible = false;
                    //Response.Write("false");
                }
                if (string.IsNullOrEmpty(sID))
                {
                    //新建模式
                    ViewState["Title"] = GetSequenceCode("QJ");
                    //Response.Write(ViewState["Title"].ToString());
                    this.txtXingmin.Text = SPContext.Current.Web.CurrentUser.Name;
                    //从人员信息列表去当前用户数据
                    SPListItem item = GetSingleItemFromPeopleInfo(SPContext.Current.Web.CurrentUser.LoginName);
                    if (item != null)
                    {
                        txtBumen.Text = ConvertObject(item["类别/部门"]);
                        txtZhiwei.Text = ConvertObject(item["职位"]);
                    }
                    LoadData();
                }
                else
                {
                    //编辑模式
                    ViewState["ID"] = sID;
                    //读取数据
                    BindExistngData(sID);
                }
    
                LoadCalculateData();
            }
        }
    复制代码

    PageLoad首次加载需绑定一行数据,当New字段为True时,表示其为新的数据,如果为fasle时,当点击删除的时候需把列表的数据也一齐删掉

    复制代码
        //初始化DataTable结构
        private DataTable InitializeDataTableStructure()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(string));
            dt.Columns.Add("Type", typeof(string));
            dt.Columns.Add("BeginTime", typeof(DateTime));
            dt.Columns.Add("EndTime", typeof(DateTime));
            dt.Columns.Add("Demo", typeof(string));
            dt.Columns.Add("New", typeof(bool));
            return dt;
        }
    
        //新建数据初始化数据,绑带GridView一行空的数据
        private void LoadData()
        {
            DataTable dt = InitializeDataTableStructure();
            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["New"] = true;
            dt.Rows.Add(dr);
            ViewState["_DT"] = dt;
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
    复制代码

    遍历GridView行生成DataTable

    复制代码
        //遍历GridView填写的数据
        protected DataTable GetDataSource()
        {
            DataTable dt = ((DataTable)ViewState["_DT"]).Clone();
            GridViewRowCollection Rows = this.GridView1.Rows;
            if (Rows != null && Rows.Count > 0)
            {
                foreach (GridViewRow gvr in Rows)
                {
                    Label lbID = gvr.FindControl("lbID") as Label;
                    CheckBox cbNew = gvr.FindControl("CheckBox1") as CheckBox;
                    DropDownList ddlQjlx = gvr.FindControl("ddlQjlx") as DropDownList;
                    DateTimeControl dtBeginTime = gvr.FindControl("dtStartTime") as DateTimeControl;
                    DateTimeControl dtEndTIme = gvr.FindControl("dtEndTime") as DateTimeControl;
                    TextBox txtDemo = gvr.FindControl("txtDemo") as TextBox;
                    DataRow dr = dt.NewRow();
                    dr["ID"] = lbID.Text;
                    dr["New"] = cbNew.Checked;
                    dr["Type"] = ddlQjlx.SelectedValue;
                    if (!dtBeginTime.IsDateEmpty)
                    {
                        dr["BeginTime"] = dtBeginTime.SelectedDate;
                    }
                    if (!dtEndTIme.IsDateEmpty)
                    {
                        dr["EndTime"] = dtEndTIme.SelectedDate;
                    }
                    dr["Demo"] = txtDemo.Text;
                    dt.Rows.Add(dr);
                }
            }
            ViewState["_DT"] = dt;
            return dt;
        }
    复制代码

    GridView可删除的功能

    复制代码
        //删除GridView选中行的数据
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            Label LabelID = ((Label)((sender as Button).Parent.Parent as GridViewRow).FindControl("lbID"));
            DataTable dt = GetDataSource();
            DataRow[] drs = dt.Select("ID='" + LabelID.Text + "'");
            bool bIsNew = Convert.ToBoolean(drs[0]["New"].ToString());
            dt.Rows.Remove(drs[0]);
            if (!bIsNew)
            {
                //不是新的数据,把请假单次表的数据也要删掉
                DeleteItemFromCiBiaoByID(LabelID.Text);
            }
            if (dt == null || dt.Rows.Count == 0)
            {
                LoadData();
                dt = (DataTable)ViewState["_DT"];
            }
            ViewState["_DT"] = dt;
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
    复制代码

    GridView行数据绑定代码

    复制代码
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            DataTable dt = (DataTable)ViewState["_DT"];
            //Response.Write(bv.ToString());
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
                Label lbID = (Label)e.Row.FindControl("lbID");
                DropDownList ddlQjlx = e.Row.FindControl("ddlQjlx") as DropDownList;
                ddlQjlx.Enabled = btnSave.Visible;
                DateTimeControl dtBeginTime = e.Row.FindControl("dtStartTime") as DateTimeControl;
                dtBeginTime.Enabled = btnSave.Visible;
                DateTimeControl dtEndTime = e.Row.FindControl("dtEndTime") as DateTimeControl;
                dtEndTime.Enabled = btnSave.Visible;
                TextBox txtDemo = e.Row.FindControl("txtDemo") as TextBox;
                txtDemo.Enabled = btnSave.Visible;
                Button btnDelete = e.Row.FindControl("btnDelete") as Button;
                btnDelete.Visible = btnSave.Visible;
                //btnDelete.Visible = bv;
                DataRow[] drs = dt.Select("ID='" + lbID.Text + "'");
                if (!string.IsNullOrEmpty(ConvertObject(drs[0]["BeginTime"])))
                {
                    dtBeginTime.SelectedDate = Convert.ToDateTime(drs[0]["BeginTime"].ToString());
                }
                if (!string.IsNullOrEmpty(ConvertObject(drs[0]["EndTime"])))
                {
                    dtEndTime.SelectedDate = Convert.ToDateTime(drs[0]["EndTime"].ToString());
                }
    
                if (!string.IsNullOrEmpty(ConvertObject(drs[0]["Type"])))
                {
                    ddlQjlx.SelectedValue = ConvertObject(drs[0]["Type"]);
                }
            }
        }
    复制代码

     保存按钮代码:

    复制代码
            SPWeb web = SPContext.Current.Web;
            SPList mainlist = web.Lists["请假单主表"];
            SPList cilist = web.Lists["请假单次表"];
    
            web.AllowUnsafeUpdates = true;
            string sMainItemID = string.Empty;
    
            if (ViewState["ID"] != null)
            {
                //旧的数据,要修改
                string sID = ViewState["ID"].ToString();
                SPListItem item = mainlist.GetItemById(Convert.ToInt32(sID));
                item["姓名"] = txtXingmin.Text.Trim();
                item["部门"] = txtBumen.Text.Trim();
                item["职位"] = txtZhiwei.Text.Trim();
    
                item.SystemUpdate();
                sMainItemID = item.ID.ToString();
            }
            else
            {
                SPListItem mainNewItem = mainlist.Items.Add();
                mainNewItem["Title"] = ViewState["Title"].ToString();
                mainNewItem["LoginName"] = SPContext.Current.Web.CurrentUser.LoginName;
                mainNewItem["姓名"] = txtXingmin.Text.Trim();
                mainNewItem["部门"] = txtBumen.Text.Trim();
                mainNewItem["职位"] = txtZhiwei.Text.Trim();
                mainNewItem.Update();
                sMainItemID = mainNewItem.ID.ToString();
            }
            if (dt != null & dt.Rows.Count > 0)
            {
                foreach (DataRow rdr in dt.Rows)
                {
                    if (Convert.ToBoolean(rdr["New"].ToString()))
                    {
                        SPListItem oNewItem = cilist.Items.Add();
                        oNewItem["请假单类型"] = ConvertObject(rdr["Type"]);
                        oNewItem["开始时间"] = Convert.ToDateTime(rdr["BeginTime"].ToString()).ToString("yyyy-MM-dd");
                        oNewItem["结束时间"] = Convert.ToDateTime(rdr["EndTIme"].ToString()).ToString("yyyy-MM-dd");
                        oNewItem["备注"] = ConvertObject(rdr["Demo"]);
                        oNewItem["ParentID"] = sMainItemID;
                        oNewItem.Update();
                    }
                    else
                    {
                        SPListItem oCurrentItem = cilist.GetItemById(Convert.ToInt32(rdr["ID"].ToString()));
                        oCurrentItem["请假单类型"] = ConvertObject(rdr["Type"]);
                        oCurrentItem["开始时间"] = Convert.ToDateTime(rdr["BeginTime"].ToString()).ToString("yyyy-MM-dd");
                        oCurrentItem["结束时间"] = Convert.ToDateTime(rdr["EndTIme"].ToString()).ToString("yyyy-MM-dd");
                        oCurrentItem["备注"] = ConvertObject(rdr["Demo"]);
                        oCurrentItem.SystemUpdate();
                    }
                }
            }
    复制代码
  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/ningang/p/4321790.html
Copyright © 2011-2022 走看看