在.net 2.0中微软引入了GridView后感觉程序员的事是越来越轻松了,这个控件可以把程序员要做的事做掉一半,方便了很多,但是它的开销不可恭维,好像是功能越是做的完善的东西开销越大,所以现在真正在开发的过程中极少用它,特别是对于数据量大的时候一般是不用的,记得那个时候还是刚刚接触这个东西的时候觉得这个真的好玩,什么都做掉了,今天没事,把以前做的例子打开看看,有点想法,不晓得把这个东西放在ajax的UpdatePanel里面会不会开销也那么大呢?这个我不是很清楚,随便做了下,效果和感觉都很好,在网上 Go了下,没有看到什么文章来评论这个控件的。我也不敢乱讲,既然微软推出来了肯定有它的用武之地咯。把代码放在这里,以后我偶尔看看也方便些:


SqlConnection con = new SqlConnection("server=.;User ID=mis;Password=vsts;database=IPP");
protected void Page_Load(object sender, EventArgs e)

{
if (!IsPostBack)

{
InitDate();
}
}

/**//// <summary>
/// 初始化数据
/// </summary>
protected void InitDate()

{
SqlDataAdapter sda = new SqlDataAdapter("SELECT TOP 30 * FROM customers WITH (NOLOCK) WHERE CustomerID IS NOT NULL AND CustomerName IS NOT NULL ORDER BY sysno DESC", con);
DataTable dt = new DataTable();
sda.Fill(dt);

ViewState["dtt"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}

/**//// <summary>
/// 选中某行记录触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)

{
string cid = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();
DataTable dt = new DataTable();

下面是在第一次查询数据库得到的DataTable里面根据cid来获取当前行的所有值#region 下面是在第一次查询数据库得到的DataTable里面根据cid来获取当前行的所有值
dt = (DataTable)ViewState["dtt"];
dt.DefaultView.RowFilter = "SysNo ='" + cid + "'";
int i = dt.DefaultView.Count;
if (i > 0)

{
Label1.Text = dt.DefaultView[0][0].ToString();
Label2.Text = dt.DefaultView[0][1].ToString();
Label3.Text = dt.DefaultView[0][2].ToString();
Label4.Text = dt.DefaultView[0][3].ToString();
Label5.Text = dt.DefaultView[0][4].ToString();
}
else
Label1.Text = "is no data";
#endregion
}

/**//// <summary>
/// 翻页的时候执行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

{
GridView1.PageIndex = e.NewPageIndex;

InitDate();
}

/**//// <summary>
/// 点击修改时应该做的事,这样只是个练习,真的做项目不建议这样拼字符串,极不安全的
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{
string cid = GridView1.DataKeys[e.RowIndex].Value.ToString();
string ccid = (GridView1.Rows[e.RowIndex].FindControl("TextBox2") as TextBox).Text;
string cname = (GridView1.Rows[e.RowIndex].FindControl("TextBox1") as TextBox).Text;
string email = (GridView1.Rows[e.RowIndex].FindControl("TextBox3") as TextBox).Text;
string phone = (GridView1.Rows[e.RowIndex].FindControl("TextBox4") as TextBox).Text;

string sql = "UPDATE Customer SET Customerid='" + cid + "' , CustomerName='" + cname + "' , email='" + email + "' , phone='" + phone + "' WHERE sysNo=" + cid;

ExecSQL(sql);
GridView1.EditIndex = -1;
InitDate();
}

/**//// <summary>
/// 点击编辑的时候响应的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

{
GridView1.EditIndex = e.NewEditIndex;
InitDate();
}

/**//// <summary>
/// 一个公共方法,可以用来做数据的添加,修改,删除,只要传相应的SQL语句过来
/// </summary>
/// <param name="sql"></param>
protected void ExecSQL(string sql)

{
SqlCommand com = new SqlCommand(sql, con);
con.Open();
com.ExecuteNonQuery();
con.Close();
Label1.Text = "Exec Success";
}

/**//// <summary>
/// 点击编辑的里面的取消按钮的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

{
GridView1.EditIndex = -1;
InitDate();
}
上面就做了个数据的显示和修改,要是做添加,删除那就和修改的一样的,在界面上添加几个绑订列绑定对应数据库表的字段,然后转换成模板列就好了。要是想不刷新,拿个ScriptManager和UpdatePanel在页面上,把东西往UpdatePanel里面拖,这样就ok了,仅此而已。
SqlConnection con = new SqlConnection("server=.;User ID=mis;Password=vsts;database=IPP");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
InitDate();
}
}
/**//// <summary>
/// 初始化数据
/// </summary>
protected void InitDate()
{
SqlDataAdapter sda = new SqlDataAdapter("SELECT TOP 30 * FROM customers WITH (NOLOCK) WHERE CustomerID IS NOT NULL AND CustomerName IS NOT NULL ORDER BY sysno DESC", con);
DataTable dt = new DataTable();
sda.Fill(dt);
ViewState["dtt"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
/**//// <summary>
/// 选中某行记录触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
string cid = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();
DataTable dt = new DataTable();
下面是在第一次查询数据库得到的DataTable里面根据cid来获取当前行的所有值#region 下面是在第一次查询数据库得到的DataTable里面根据cid来获取当前行的所有值
dt = (DataTable)ViewState["dtt"];
dt.DefaultView.RowFilter = "SysNo ='" + cid + "'";
int i = dt.DefaultView.Count;
if (i > 0)
{
Label1.Text = dt.DefaultView[0][0].ToString();
Label2.Text = dt.DefaultView[0][1].ToString();
Label3.Text = dt.DefaultView[0][2].ToString();
Label4.Text = dt.DefaultView[0][3].ToString();
Label5.Text = dt.DefaultView[0][4].ToString();
}
else
Label1.Text = "is no data";
#endregion
}
/**//// <summary>
/// 翻页的时候执行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
InitDate();
}
/**//// <summary>
/// 点击修改时应该做的事,这样只是个练习,真的做项目不建议这样拼字符串,极不安全的
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string cid = GridView1.DataKeys[e.RowIndex].Value.ToString();
string ccid = (GridView1.Rows[e.RowIndex].FindControl("TextBox2") as TextBox).Text;
string cname = (GridView1.Rows[e.RowIndex].FindControl("TextBox1") as TextBox).Text;
string email = (GridView1.Rows[e.RowIndex].FindControl("TextBox3") as TextBox).Text;
string phone = (GridView1.Rows[e.RowIndex].FindControl("TextBox4") as TextBox).Text;
string sql = "UPDATE Customer SET Customerid='" + cid + "' , CustomerName='" + cname + "' , email='" + email + "' , phone='" + phone + "' WHERE sysNo=" + cid;
ExecSQL(sql);
GridView1.EditIndex = -1;
InitDate();
}
/**//// <summary>
/// 点击编辑的时候响应的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
InitDate();
}
/**//// <summary>
/// 一个公共方法,可以用来做数据的添加,修改,删除,只要传相应的SQL语句过来
/// </summary>
/// <param name="sql"></param>
protected void ExecSQL(string sql)
{
SqlCommand com = new SqlCommand(sql, con);
con.Open();
com.ExecuteNonQuery();
con.Close();
Label1.Text = "Exec Success";
}
/**//// <summary>
/// 点击编辑的里面的取消按钮的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
InitDate();}
上面就做了个数据的显示和修改,要是做添加,删除那就和修改的一样的,在界面上添加几个绑订列绑定对应数据库表的字段,然后转换成模板列就好了。要是想不刷新,拿个ScriptManager和UpdatePanel在页面上,把东西往UpdatePanel里面拖,这样就ok了,仅此而已。
浙公网安备 33010602011771号