设为首页 收藏本站
查看: 650|回复: 0

[经验分享] 在webpart中使用updatepanel控件,并在sharepoint中实现ajax局部刷新

[复制链接]

尚未签到

发表于 2015-9-29 07:37:56 | 显示全部楼层 |阅读模式
  最近在做这方面的东东,把这几天学到的东东跟大家分享一下,有不好的地方请大家给予指点,在此向大学学习了,^0^  。
  我想实现的功能是,用QuickPart包装器的方式加载.NET编写的WebPart的控件,webpart控件中使用了微软的ajax控件控制局部刷新,
  其实最初我是想用ajaxpro,但是控件我之前已经写好了,为了不重写代码,所以我又选择改用ajax控件了.
  从网上找了些资料,但是发现都是转来转去的同一篇文章,这里要感谢园子里“悠闲小风专栏”的两篇文章,给我很多启发,而且我感觉应该是原著,贴出地址,推荐给大家。http://www.cnblogs.com/chendianhong/
  开发AJAX Enabled WebPart               http://www.cnblogs.com/chendianhong/archive/2009/04/13/1435008.html
  让Moss2007支持AJAX                       http://www.cnblogs.com/chendianhong/archive/2009/04/12/1434284.html
  关于ajax在moss 中的配置,这里我就不复述了,大家看上面链接中“让Moss2007支持AJAX”的文章就可以知道如何配置了,而另一篇中作者编写的是一个自定义的控件,包括样式、实例化等,而我是采用了另一种方式,本人比较懒,所以就直接用了ascx控件来拖拽一些控件,没有自己再写定义,当然必要的代码还是要自己写的,下面给出具体步骤.
  1、
  准备工作,要安装ASPAJAXExtSetup.msi ,还要 升级 sharepoint server sp1, 安装和部署QuickPart 到moss中, 这些网上都可以下载到,
  打开vs2005,新建->网站->ASP.NET AJAX Enabled WebSite 项目,项目名 AJAXEnabledWebSiteView ,
  然后,添加引用 AjaxControlToolkit.dll  (这个网上也可以下载到),
  在建好的项目中新建一个 UC_GridViewList.ascx 的用户控件,在应该控件中添加 scriptmanager 、updatepanel、dropdownlist、gridview 控件,代码如下:
  (1)UC_GridViewList.ascx  代码   
  这里强调一个地方,就是下面这段:   

DSC0000.gif DSC0001.gif Code
<script language="javascript">

   function _initFormActionAjax()
   {
      if (_spEscapedFormAction == document.forms[0].action)
      {
         document.forms[0]._initialAction = document.forms[0].action;
      }
   }
   var RestoreToOriginalFormActionCore = RestoreToOriginalFormAction;
   RestoreToOriginalFormAction = function()
   {
      if (_spOriginalFormAction != null)
      {
         RestoreToOriginalFormActionCore();
         document.forms[0]._initialAction = document.forms[0].action;
      }
   }
   
   _spBodyOnLoadFunctionNames.push("_initFormActionAjax");
</script>  
  这段一定要加,&#8220;悠闲小风专栏&#8221;中&#8220;开发AJAX Enabled webpart&#8221;一文中已经说明原由--对于事件回发的响应问题还应在制作控件时添加改写wss 脚本的代码,因为如果这里不修改脚本,那么对于JavaScript_doPostBack()提交更改的ASP.NET控件,可能会发生整个页面的回发事件。
  下面是页面完整代码:

Code
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UC_GridViewList.ascx.cs" Inherits="UC_GridViewList" %>
<script language="javascript">

   function _initFormActionAjax()
   {
      if (_spEscapedFormAction == document.forms[0].action)
      {
         document.forms[0]._initialAction = document.forms[0].action;
      }
   }
   var RestoreToOriginalFormActionCore = RestoreToOriginalFormAction;
   RestoreToOriginalFormAction = function()
   {
      if (_spOriginalFormAction != null)
      {
         RestoreToOriginalFormActionCore();
         document.forms[0]._initialAction = document.forms[0].action;
      }
   }
   
   _spBodyOnLoadFunctionNames.push("_initFormActionAjax");
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <table style="width: 100%">
            <tr>
                <td style="width: 40%">
                    请选择项目:<asp:DropDownList ID="DDL_project" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDL_project_SelectedIndexChanged">
                    </asp:DropDownList></td>
                <td>
                    请选择组内成员:<asp:DropDownList ID="DDL_proUser" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDL_proUser_SelectedIndexChanged">
                    </asp:DropDownList>
                </td>
                <td style="width: 20%">
                </td>
            </tr>
            <tr>
                <td colspan="3">
                    &nbsp;<asp:GridView ID="GridView_userlog" runat="server" AllowPaging="True" AutoGenerateColumns="False"
                        BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px"
                        CellPadding="3" GridLines="Vertical" OnPageIndexChanging="GridView_userlog_PageIndexChanging"
                        Width="100%">
                        <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
                        <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
                        <Columns>
                            <asp:BoundField DataField="姓名" HeaderText="姓名">
                                <ItemStyle HorizontalAlign="Center" Width="10%" />
                            </asp:BoundField>
                            <asp:BoundField DataField="域帐号" HeaderText="域帐号" Visible="False">
                                <ItemStyle HorizontalAlign="Center" />
                            </asp:BoundField>
                            <asp:BoundField DataField="项目名称" HeaderText="项目名称">
                                <ItemStyle Width="20%" />
                            </asp:BoundField>
                            <asp:BoundField DataField="版本名称" HeaderText="版本名称">
                                <ItemStyle Width="10%" />
                            </asp:BoundField>
                            <asp:BoundField DataField="阶段名称" HeaderText="阶段名称">
                                <ItemStyle Width="10%" />
                            </asp:BoundField>
                            <asp:BoundField DataField="填写日期" HeaderText="填写日期">
                                <ItemStyle HorizontalAlign="Center" Width="20%" />
                            </asp:BoundField>
                            <asp:BoundField DataField="工时" HeaderText="工时">
                                <ItemStyle HorizontalAlign="Center" Width="10%" />
                            </asp:BoundField>
                            <asp:BoundField DataField="日志内容" HeaderText="日志内容" />
                        </Columns>
                        <PagerStyle BackColor="Silver" ForeColor="Black" HorizontalAlign="Center" />
                        <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
                        <HeaderStyle BackColor="#99CCFF" Font-Bold="True" ForeColor="White" />
                        <AlternatingRowStyle BackColor="Gainsboro" />
                    </asp:GridView>
                </td>
            </tr>
            <tr>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
            </tr>
        </table>
    </ContentTemplate>
</asp:UpdatePanel>
  
  
  (2)UC_GridViewList.ascx.cs  代码
  
  

Code

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;


public partial class UC_GridViewList : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            bind();
        }
    }

    /// <summary>
    /// 初始化
    /// </summary>
    private void bind()
    {
        string username = HttpContext.Current.User.Identity.Name;
        username = username.Substring(username.LastIndexOf("\\") + 1);
        string strsel = "select p_no,p_name from ut_projectbase where p_no in (select distinct p_no from ut_projectusers where pu_domainno='" + username + "')";
        ddl_bind(DDL_project, strsel, "p_name", "p_no", "请选择项目");

        data_bind();
    }

    private void data_bind()
    {

        string pudomainno = "";
        if (DDL_proUser.SelectedValue != "0" && DDL_proUser.SelectedValue != string.Empty)
        {
            pudomainno = DDL_proUser.SelectedValue.Trim();
        }
        else
        {
            string username = HttpContext.Current.User.Identity.Name;
            username = username.Substring(username.LastIndexOf("\\") + 1);
            pudomainno = username;
        }
        this.GridView_userlog.DataSource = dt_list(pudomainno);
        this.GridView_userlog.DataBind();
    }

    private DataTable dt_list(string domainno)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("姓名");
        dt.Columns.Add("域帐号");
        dt.Columns.Add("项目名称");
        dt.Columns.Add("版本名称");
        dt.Columns.Add("阶段名称");
        dt.Columns.Add("填写日期");
        dt.Columns.Add("工时");
        dt.Columns.Add("日志内容");

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "User ID=worklog_sa;pwd=1;Data Source=localhost;Initial Catalog=worklog;connection timeout=60;Max Pool Size = 512;";

        string p_no = "";
        string strcomm = "";
        if (DDL_project.SelectedValue.Trim() != "0" && DDL_project.SelectedValue.Trim() != string.Empty)
        {
            p_no = DDL_project.SelectedValue.Trim();
            strcomm = "select (select DISTINCT pu_name from ut_projectusers where pu_domainno='" + domainno + "') as u_name,pu_domainno,";
            strcomm += "(select p_name from ut_projectbase where p_no=ut_logreport.p_no) as p_name,";
            strcomm += "(select pv_name from ut_projectversion where pv_no=ut_logreport.pv_no) as pv_name,";
            strcomm += "(select ps_name from ut_projectstage where ps_no=ut_logreport.ps_no) as ps_name,";
            strcomm += " lr_workdate,lr_time,lr_content ";
            strcomm += "from ut_logreport where pu_domainno='" + domainno + "' and p_no='" + p_no + "'";
        }
        else
        {
            strcomm = "select (select DISTINCT pu_name from ut_projectusers where pu_domainno='" + domainno + "') as u_name,pu_domainno,";
            strcomm += "(select p_name from ut_projectbase where p_no=ut_logreport.p_no) as p_name,";
            strcomm += "(select pv_name from ut_projectversion where pv_no=ut_logreport.pv_no) as pv_name,";
            strcomm += "(select ps_name from ut_projectstage where ps_no=ut_logreport.ps_no) as ps_name,";
            strcomm += " lr_workdate,lr_time,lr_content ";
            strcomm += "from ut_logreport where pu_domainno='" + domainno + "' ";
        }

        SqlCommand comm = new SqlCommand(strcomm, conn);

        SqlDataAdapter da = new SqlDataAdapter(comm);

        DataSet ds = new DataSet();

        da.Fill(ds);
        foreach (DataRow dsdr in ds.Tables[0].Rows)
        {
            DataRow dr = dt.NewRow();
            dr["姓名"] = dsdr["u_name"].ToString().Trim();
            dr["域帐号"] = dsdr["pu_domainno"].ToString().Trim();
            dr["项目名称"] = dsdr["p_name"].ToString().Trim();
            dr["版本名称"] = dsdr["pv_name"].ToString().Trim();
            dr["阶段名称"] = dsdr["ps_name"].ToString().Trim();
            dr["填写日期"] = dsdr["lr_workdate"].ToString().Trim();
            dr["工时"] = dsdr["lr_time"].ToString().Trim();
            dr["日志内容"] = dsdr["lr_content"].ToString().Trim();

            dt.Rows.Add(dr);
        }

        return dt;
    }





    private void ddl_bind(DropDownList ddl, string strsel, string textField, string vauleField, string strmotion)
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "User ID=worklog_sa;pwd=1;Data Source=localhost;Initial Catalog=worklog;connection timeout=60;Max Pool Size = 512;";

        string strcomm = strsel;  //

        SqlCommand comm = new SqlCommand(strcomm, conn);

        SqlDataAdapter da = new SqlDataAdapter(comm);

        DataSet ds = new DataSet();
        da.Fill(ds);
        ddl.DataSource = ds.Tables[0];
        ddl.DataTextField = textField;
        ddl.DataValueField = vauleField;
        ddl.DataBind();
        ddl.Items.Insert(0, "" + strmotion + "");
        ddl.Items[0].Value = "0";
    }



    protected void DDL_project_SelectedIndexChanged(object sender, EventArgs e)
    {
        string strsel = "select distinct pu_name,pu_domainno from ut_projectusers where p_no='" + DDL_project.SelectedValue.Trim() + "'";
        ddl_bind(DDL_proUser, strsel, "pu_name", "pu_domainno", "请选择组内成员");
    }
    protected void DDL_proUser_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (DDL_proUser.SelectedValue != "0")
        {
            this.GridView_userlog.DataSource = dt_list(DDL_proUser.SelectedValue.Trim());
            this.GridView_userlog.DataBind();
        }
    }

  
    protected void GridView_userlog_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView_userlog.PageIndex = e.NewPageIndex;
        data_bind();

    }
}
  
  
  到这里代码部分完成了,前提时文章中我所提到的关于ajax控件和quickpart在moss 中已都正确安装并部署,然后接着下来要做的是:
  2、
  发布编写好的用户自定义控件,然后将发布文件夹中bin目录下的.dll复制粘贴到 moss 站点下的 bin 目录下,假设这里我的moss 目录为:
  C:\Inetpub\wwwroot\wss\VirtualDirectories\4095\bin   一般都是在这个位置,只是一般默认是应该是 80 站点,这里的 4095 是我自己 创建的网站集站点,
  然后还要把发布后生成.ascx文件复制粘贴到moss 站点下的C:\Inetpub\wwwroot\wss\VirtualDirectories\4095\wpresources  目录下,
  最后到你想要加载引用控件的网站集中 ,选择"网站操作--编辑网页--添加web部件",在弹出框中选择"QuickPart(Provider)"如下图所示:
DSC0002.jpg
  然后单击"添加",添加成功后,在应该部件的右侧,选择"编辑--修改共享web部件"
DSC0003.jpg
  然后按下图所示操作:在"用户控件列表"的下拉框中选择已发布的控件,然后单击"确定",
DSC0004.jpg
  到这里,控件就加载成功了,然后"退出编辑模式"后, 重新打开站点,就可以看到效果了,
  
DSC0005.jpg
  可以试一试,在使用了updatepanel控件的自定义控件中,单击按扭就可以实现局部刷新了,而不是整个页面都刷新。
  有叙述的不清楚的地方请指点,^0^,祝大家工作好心情。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120142-1-1.html 上篇帖子: SharePoint 2010开发最佳实践指南 下篇帖子: 使用RDCMan管理SharePoint虚拟机的重复要求验证的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表