用过SAP的都知道SAP的选择屏,也就是查询屏幕。为了防止用户在输入查询关键字时输入错误而得不到正确结果,SAP为每一个文本框都配置了一个选择按钮,按钮按下时,会弹出数据库中该字段的所有数据列表,以方便用户选择。
最近做一个sap的RFC开发,前端用.NET的B/S结构,RFC读取SAP后台的oracle数据库。用户希望既能拥有web开发美观、便捷的优点,同时在使用习惯上,尽量保留SAP的一些特点。
按照用户的要求,不只是查询界面,几乎所有的CRUD操作都需要有选择按钮,算一下,好几十个文本框,如果一个一个开发,简直生不如死。于是想到了用WEB用户控件,顺便重温下用户控件的创建和使用过程。
1. 在项目中添加web用户控件(后缀名为.ascx)。这里命名为searchButton,放置与根目录下的App_Control文件夹中。
2. 在其中放置三个控件,ImageButton、GridView、SqlDataSource。ImageButton是选择按钮的前端,GridView用以显示数据,SqlDataSource嘛,是我懒得写后台代码
3. GridView先隐藏,由ImageButton触发显示,同时,启用选择列,用户选择数据操作完成后,再次隐藏
前台的逻辑至此完成差不多了,接下来是后台代码
4. 需要定义三个参数:
string _controlToFill; //需填充的控件
string _table; //数据库表名
string _field; //字段名
5. 设定三个参数的构造器(set;get;),这里略去
6. 然后是pageload
protected void Page_Load(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand = "SELECT " + _field + " FROM " + _table;
GridView1.DataBind();
}
7. 选择按钮触发时的事件代码
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
TextBox tb = (TextBox)this.Parent.FindControl(ControltoFill);
tb.Text = this.GridView1.SelectedRow.Cells[1].Text;
GridView1.Visible = false;
}
8. GridView的隐藏和显示
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
if (GridView1.Visible == true)
GridView1.Visible = false;
else
GridView1.Visible = true;
}
最后效果如图:
1.在Web.config中注册
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="app" src="~/App_Control/searchButton.ascx" tagName="searchButton"/> </controls>
2.页面中使用
<app:searchButton ID="sb1" runat="server" ControltoFill="TextBox1" table="mpo" field="mpo_orderID" />
其中app是Web.config文件中的tagPrefix,searchButton是tagName,ControltoFill是需要填充的文本框ID,table是数据库表明,field是字段名
|