用于弹出ModalDialog进行数据选择的控件

过去写的webform程序,  很多地方需要弹出一个窗口进行数据选择.  最简单的情况是选择了弹出窗口某条数据后直接修改某个html元素的值, 麻烦一点的就是数据库可能保存的是被选择记录的id, 所以除了有用于显示文字的textbox, 还要有一个用来存放id的hidden. 更恐怖的就是选了一条记录后, 还要根据这条记录填充多个html元素的值. 最近写了个控件, 能比较通用的处理这些情况. 

这是一个复合控件, 里面包含了一个用来显示文字的TextBox(Text对应控件Text属性), 一个用来存放幕后真实值的隐藏的TextBox(Text对应控件的Value属性), 和一个用Image做成的按钮. 

按钮被点击后, 将会调用负责弹出ModalDialog的js函数, 这个函数由ClientOnClick属性指定.  然后这个函数则要根据实际需要去写.  对ModalDialog的要求是, 点击某条记录后应该返回一个包含所需属性的自定义的js对象, 对打开ModalDialog的函数要求是, 第一个参数是传入用于显示文字的TextBox的id, 第二个是hidden的Id.  如果有需要的话可以有更多参数, 在控件的ClientOnClickParams属性以,param1,param2...的形式传入. 用showModalDioalog函数打开用于选择数据的窗口并选择数据后, 给显示文字TextBox和hidden赋需要的值, 最后函数返回ModalDialog的返回值. 在下面的示例函数里虽然只处理了name和id属性, 但ModalDialog可以返回更多信息( 例如sex, birthday属性), 留给ClientAfterClick属性指定的js函数去处理. 示例代码中用了setControls函数读取sex, birthday并把他们填入相应的TextBox 

function openTestWindow(displayId, valueId, more) { 
    var popUp; 
    var offsetTop = document.getElementById(displayId).offsetTop; 
    var offsetLeft = document.getElementById(displayId).offsetLeft; 
    var parentElement = document.getElementById(displayId).offsetParent; 
    while (parentElement) { 
        offsetTop += parentElement.offsetTop; 
        offsetLeft += parentElement.offsetLeft; 
        parentElement = parentElement.offsetParent; 
    } 
    offsetLeft += window.screenLeft - document.body.scrollLeft ; 
    offsetTop += window.screenTop  + document.getElementById(displayId).offsetHeight - document.body.scrollTop; 
    if (!more) { 
        url = '/dialogs/SelectPerson.aspx'; 
    } 
    else { 
        url = '/dialogs/SelectPerson.aspx?morePerson=' + more; 
    } 
    url = applicationPath + url; 
    popUp = window.showModalDialog(url,  
        [window],  
        'dialogWidth:300px;dialogHeight:300px;status:0;dialogLeft:' + offsetLeft + ';dialogTop:' + offsetTop ) ; 
    if (popUp != null) { 
        document.getElementById(displayId).value = popUp.name; 
        document.getElementById(valueId).value = popUp.id; 
        return popUp; 
    } 

 
控件  示例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个功能需要用到C#中的文件对话框和DataGridView控件。以下是一个简单的实现步骤: 1. 添加文件对话框控件 在Visual Studio中,打开窗体设计器,从工具箱中拖拽一个OpenFileDialog控件到窗体中。 2. 添加DataGridView控件 从工具箱中拖拽一个DataGridView控件到窗体中。 3. 绑定数据源 在窗体的Load事件中,使用SqlConnection和SqlDataAdapter类连接数据库并执行查询,然后将查询结果绑定到DataGridView控件中。 4. 打开文件对话框 在窗体中添加一个按钮,点击按钮时弹出文件对话框,允许用户选择需要打开的数据文件。 5. 显示相关数据表 获取用户选择的文件路径后,使用OleDbConnection和OleDbDataAdapter类连接数据文件并执行查询,然后将查询结果绑定到DataGridView控件中。 以下是一个简单的代码示例: ``` using System; using System.Data; using System.Data.OleDb; using System.Data.SqlClient; using System.Windows.Forms; namespace MyApplication { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // 连接数据库并执行查询 string connectionString = "Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True"; string sql = "SELECT * FROM MyTable"; SqlConnection connection = new SqlConnection(connectionString); SqlDataAdapter adapter = new SqlDataAdapter(sql, connection); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); // 绑定数据源 dataGridView1.DataSource = dataTable; } private void button1_Click(object sender, EventArgs e) { // 打开文件对话框 OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "Excel文件|*.xls;*.xlsx|所有文件|*.*"; openFileDialog1.Title = "选择数据文件"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { // 连接数据文件并执行查询 string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openFileDialog1.FileName + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;'"; string sql = "SELECT * FROM [Sheet1$]"; OleDbConnection connection = new OleDbConnection(connectionString); OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); // 绑定数据源 dataGridView1.DataSource = dataTable; } } } } ``` 需要注意的是,连接Excel文件时需要使用OleDbConnection和OleDbDataAdapter类,连接字符串中的Data Source参数需要指定Excel文件路径,Extended Properties参数需要指定Excel版本和HDR、IMEX属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值