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();
                    }
                }
            }
    复制代码
  • 相关阅读:
    WindowsServer 2016激活
    selenium浏览器复用与原理分析
    react脚手架: 配置代理
    网络请求方式
    Java: Excel导入导出
    react 组件通信方式
    react: reactrouterdom
    react: 高阶函数及函数柯里化
    react: 事件处理
    react: 生命周期
  • 原文地址:https://www.cnblogs.com/ningang/p/4321790.html
Copyright © 2011-2022 走看看