1. 既然利用了三层构架,那么就要充分利用三层构架的优势,利用Bll中的方法(如果没有可以在强类型的DataSet中创建,然后在TableAdapter中封装,创建public方法)去支持Select,Update,delete等方法,如果想利用一个搜索到的记录集直接赋值给GridView的DataSource,那么,对该搜索记录的操作只能手动编写代码去实现,比如command,connection等. 因为没有经过ObjectDataSource,所以不能调用ObjectDataSource的方法.而此时GridView只做为一个显示容器或控件,它的Select,Update,delete等方法对记录集不起作用.只起到一个显示作用.
2,在操作过程中,因为GridView的一些事件触发,要明白它们发生的先后顺序,否则可能一塌糊涂. 如下
在*ing中不能加入*的操作代码,比如RowEditing中加入DispalyAllBar.UpdateRow(e.RowIndex,true);这类操作代码, 会引起无限循环,RowUpdating发生在UpdateRow之前,这样的话,在RowUpdating里进行UpdateRow,而UpdateRow又会引起RowUpdating动作,这样就形成一个无限循环了.(*为Delete,Update,Cancel)
3 注意, GridView的viewState状态保存会影响搜索出来的记录编辑. 有时ViewState的设置很重要.
4.关于在执行时引发的未能找到带参数的非泛型方法
出现这个问题大多是在使用ObjectDataSource的时候.这时的数据读取,删除,编辑,添加等都是使用的你在BLL中抽象出来的方法.举个例子,一个表有4列属性,select以后会在detailview中产生4行内容,其中有一行是不用更新的,于是你在方法中没有设定这个参数.如果你要对这条选定的数据进行更新,那么ObjectDataSource默认是有4个属性的,但是你的方法确只有3个.这时就会出现"未能找到带参数的非泛型方法".其实你好好看看报错的内容就知道,肯定是默认的参数个数多出了你定义的个数.要解决其实也简单.一是直接删除ObjectDataSource中自动生成的那些Update参数.二是在你的方法中定义跟你显示的数据一样多的参数.大不了设定了不用,.也可能是属性名跟数据库中的参数名不同导致.(查看参数集合中的参数个数和参数名,查看BLL中类的方法是否正确,最好是用主键作为查找或删除的依据.是否显示控件在ViewState中保持了视图,如果实在不行,将控件删除重建.)
5. cmd.CommandText = "update Guba_Admin_Disp set loginip='" + Request.UserHostAddress.ToString() + "',loginTime=loginTime+1,logindate='"+DateTime.Now.ToString()+"' where username ='" + TextUserName.Text.Trim() + "'";DateTime的类型的数据要用string数据写入(而在某些编程方式中又不同)
6.关于ObjectDataSource搜索数据记录方法;
主要是靠动态设置ObjectDataSource的SelectMethod(ObjectDataSource初始状态不能设置,设为空.只设置它的TypeName(BLL中的类名).而SelectMethod的值必须是TypeName中的方法名. 因为Postback时ObjectDataSource会重新绑定SelectMethod方法,从以下重复的代码也可以看出,一旦Postback就要重新设置ObjectDataSource的SelectMethod的值,这个问题可以考虑一下).这样得到的结果集(我们想要的搜索结果)的处理方法还是按照ObjectDataSource原来设置的的方法来处理,比如Update,Delete,Insert...
2,在操作过程中,因为GridView的一些事件触发,要明白它们发生的先后顺序,否则可能一塌糊涂. 如下
在*ing中不能加入*的操作代码,比如RowEditing中加入DispalyAllBar.UpdateRow(e.RowIndex,true);这类操作代码, 会引起无限循环,RowUpdating发生在UpdateRow之前,这样的话,在RowUpdating里进行UpdateRow,而UpdateRow又会引起RowUpdating动作,这样就形成一个无限循环了.(*为Delete,Update,Cancel)
3 注意, GridView的viewState状态保存会影响搜索出来的记录编辑. 有时ViewState的设置很重要.
4.关于在执行时引发的未能找到带参数的非泛型方法
出现这个问题大多是在使用ObjectDataSource的时候.这时的数据读取,删除,编辑,添加等都是使用的你在BLL中抽象出来的方法.举个例子,一个表有4列属性,select以后会在detailview中产生4行内容,其中有一行是不用更新的,于是你在方法中没有设定这个参数.如果你要对这条选定的数据进行更新,那么ObjectDataSource默认是有4个属性的,但是你的方法确只有3个.这时就会出现"未能找到带参数的非泛型方法".其实你好好看看报错的内容就知道,肯定是默认的参数个数多出了你定义的个数.要解决其实也简单.一是直接删除ObjectDataSource中自动生成的那些Update参数.二是在你的方法中定义跟你显示的数据一样多的参数.大不了设定了不用,.也可能是属性名跟数据库中的参数名不同导致.(查看参数集合中的参数个数和参数名,查看BLL中类的方法是否正确,最好是用主键作为查找或删除的依据.是否显示控件在ViewState中保持了视图,如果实在不行,将控件删除重建.)
5. cmd.CommandText = "update Guba_Admin_Disp set loginip='" + Request.UserHostAddress.ToString() + "',loginTime=loginTime+1,logindate='"+DateTime.Now.ToString()+"' where username ='" + TextUserName.Text.Trim() + "'";DateTime的类型的数据要用string数据写入(而在某些编程方式中又不同)
6.关于ObjectDataSource搜索数据记录方法;
主要是靠动态设置ObjectDataSource的SelectMethod(ObjectDataSource初始状态不能设置,设为空.只设置它的TypeName(BLL中的类名).而SelectMethod的值必须是TypeName中的方法名. 因为Postback时ObjectDataSource会重新绑定SelectMethod方法,从以下重复的代码也可以看出,一旦Postback就要重新设置ObjectDataSource的SelectMethod的值,这个问题可以考虑一下).这样得到的结果集(我们想要的搜索结果)的处理方法还是按照ObjectDataSource原来设置的的方法来处理,比如Update,Delete,Insert...
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;
public partial class PostBarManage_AllPostBar : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (TextSearch.Text.Trim() == "")
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDisp";
DataSourceAllBar.Select();
}
else
{
if (RadioCode.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByStockNO";
DataSourceAllBar.SelectParameters.Add("StockNO", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
if (RadioName.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByBoardName";
DataSourceAllBar.SelectParameters.Add("BoardName", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
}
//if (DispalyAllBar.Rows.Count < 1) 代码放的位置未确定
// LbMessage.Visible = true;
}
protected void BtnSearch_Click(object sender, EventArgs e)
{
if (TextSearch.Text.Trim() == "")
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDisp";
DataSourceAllBar.Select();
}
else
{
if (RadioCode.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByStockNO";
DataSourceAllBar.SelectParameters.Add("StockNO", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
if (RadioName.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByBoardName";
DataSourceAllBar.SelectParameters.Add("BoardName", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
}
}
}
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;
public partial class PostBarManage_AllPostBar : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (TextSearch.Text.Trim() == "")
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDisp";
DataSourceAllBar.Select();
}
else
{
if (RadioCode.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByStockNO";
DataSourceAllBar.SelectParameters.Add("StockNO", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
if (RadioName.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByBoardName";
DataSourceAllBar.SelectParameters.Add("BoardName", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
}
//if (DispalyAllBar.Rows.Count < 1) 代码放的位置未确定
// LbMessage.Visible = true;
}
protected void BtnSearch_Click(object sender, EventArgs e)
{
if (TextSearch.Text.Trim() == "")
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDisp";
DataSourceAllBar.Select();
}
else
{
if (RadioCode.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByStockNO";
DataSourceAllBar.SelectParameters.Add("StockNO", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
if (RadioName.Checked)
{
DataSourceAllBar.SelectParameters.Clear();
DataSourceAllBar.SelectMethod = "GetBoardDispByBoardName";
DataSourceAllBar.SelectParameters.Add("BoardName", TypeCode.String, string.Format("{0}", TextSearch.Text));
DataSourceAllBar.Select();
}
}
}
}