不采用SqlDataSource来存储,改用后台DataSet调用数据来前台绑定

说明:平时开发都是用到SqlDataSource来存放数据连接字段及查询表结果,这样在连接Gridview等控件时非常好操作。

这次用工号查询取员工姓名,解决姓名为Null问题,决定不采用SqlDataSource来存储,改用后台DataSet。

这样就会出现如下几个问题,GridView控件的后台操作方法需要手写来处理。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>姓名同步修改</title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="divGV" align="center">
        <asp:GridView ID="gvStaffName" runat="server" AutoGenerateEditButton="True" 
            onrowcancelingedit="gvStaffName_RowCancelingEdit" 
            onrowediting="gvStaffName_RowEditing" 
            onrowupdating="gvStaffName_RowUpdating" Width="720px" >
        </asp:GridView>
    </div>
    <asp:Label ID="lblID" runat="server" Text=""></asp:Label>
    </form>
</body>
</html>

1、定义公共参数:

 SQLHelper sqlhelper = new SQLHelper();
 string strID = "";

2、定义页面加载:protected void Page_Load(object sender, EventArgs e)

    protected void Page_Load(object sender, EventArgs e)
    {
        Page.MaintainScrollPositionOnPostBack = true;
        gvStaffName.DataSource = sqlhelper.ExecuteQuery("select * from eLearningRecord");
        gvStaffName.DataBind();
    }

3、加载RowEditing编辑页面并保存取到的ID号

    /// <summary>
    /// //加载RowEditing编辑页面并保存取到的ID号
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvStaffName_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //加载RowEditing编辑页面
        gvStaffName.EditIndex = e.NewEditIndex;
        gvStaffName.DataBind();
        //输出行号ID
        Response.Write(e.NewEditIndex + 1 + "/");
        strID = (e.NewEditIndex + 1).ToString();
        lblID.Text = strID;
    }

4、取消操作,点击Cancel可以返回编辑页面

    /// <summary>
    /// 取消操作,点击Cancel可以返回编辑页面
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvStaffName_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gvStaffName.EditIndex = -1;
        gvStaffName.DataBind();
    }

5、加载页面编辑操作RowUpdating

 protected void gvStaffName_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        
        DataSet dtResults = new DataSet();
        DataSet dtResults_HR = new DataSet();
        string strwebSql = "select * from eLearningRecord where id =" + lblID.Text + "";
        //dtResults.Merge(sqlhelper.RQ_getFromStaffName("select * from eLearningRecord where id =" + (e.NewEditIndex + 1).ToString() + ""));
        dtResults = dtwebResult(strTxwebsvrSql);
        string strStaffName = "";
        string strStaffName_HR = "";
        string strStaffNo = "";
        if (dtResults.Tables[0].Rows.Count > 0)
        {
            strStaffName = dtResults.Tables[0].Rows[0]["StaffName"].ToString();
            strStaffNo = dtResults.Tables[0].Rows[0]["StaffNo"].ToString();
            if (strStaffName == null || strStaffName.Length == 0)
            {
                //dtResults.Merge(sqlhelper.RunQuery_getStaffName("SELECT [StaffNo], [ChineseName] FROM [VHMS_StaffNameSection]  where staffno =" + strStaffNo + ""));
                string strSql = "SELECT [StaffNo], [ChineseName] FROM [VHMS_StaffNameSection]  where staffno =" + strStaffNo + "";
                dtResults_HR = dtHRResult(strSql);
                if (dtResults_HR.Tables[0].Rows.Count > 0)
                {
                    strStaffName_HR = dtResults_HR.Tables[0].Rows[0]["ChineseName"].ToString();
                    string strwebUpdate = "update  eLearningRecord set StaffName = '" + strStaffName_HR + "' where StaffNo='" + strStaffNo + "'";
                    bool blUpdate = sqlhelper.bl_UpdateFromweb(strwebUpdate);
                    if (blUpdate)
                    {
                       // Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "<script language=JavaScript>alert('姓名修改成功!');</script>");

                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "<script language=JavaScript>alert('姓名修改失败,请重试!');</script>");

                    }
                }
            }
        }
        gvStaffName.DataSource = sqlhelper.ExecuteQuery("select * from eLearningRecord");
        gvStaffName.DataBind();

        //输出行号对应的员工姓名 strStaffName
        Response.Write(strStaffName + "/");

        //输出HR表行号对应的员工姓名 strStaffName
        Response.Write(strStaffName_HR);
        //GridView点击更新后回到点击“编辑”前的样式
        gvStaffName.EditIndex = -1;
        gvStaffName.DataBind();
    }
}

6、定义两个连接数据库的public 方法

    /// <summary>
    /// 对HR表里的员工信息进来查找
    /// </summary>
    /// <param name="strSql"></param>
    /// <returns></returns>
    public DataSet dtHRResult(string strSql)
    {
        DataSet dtResults = new DataSet();
        dtResults.Merge(sqlhelper.RunQuery_getStaffName(strSql));
        return dtResults;
    }

    public DataSet dtwebResult(string strSql)
    {
        DataSet dtResults = new DataSet();
        dtResults.Merge(sqlhelper.RQ_getFromwebStaffName(strSql));
        return dtResults;
    }
原文地址:https://www.cnblogs.com/iDennis/p/5702381.html