前几天,有个网友问我这么一个问题:“当点击DataGrid中的某行或某个Cell时(DataGrid中的数据是通过DataSet得到的),能弹出一个对话框,这个对话框能显示点击的这一行的所有字段信息,应该如何实现?”
正好,我前一阵子写了个小例子,现在我来介绍怎么结合JavaScript来实现这个需求。
我们知道web控件最终都是被转化成html控件在客户端显示的,所以了解了DataGrid里的元素都一一对应着哪些html元素是解决问题的关键。
首先,我们要在DataGrid的 ItemDataBound 事件里,将我们所需要的 javascript 处理添加进去。
private int index = 0; // 绑定数据的下标。
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
e.Item.Attributes.Add("id", "row_" + index.ToString());
e.Item.Attributes.Add("onmouseover", "Mouse_Over(this)");
e.Item.Attributes.Add("onclick", "Item_Click(this)");
index++;
}
解释一下, DataGrid1 将被转化成名为"DataGrid1"的<table>HTML标签, e.Item 其实就这个Table中的<TR>即每一行。
我将把每一行的唯一标识 row_0 ... 添加到这个<TR>里。然后呢,我添加了这行鼠标滑过的客户端事件的处理函数(javascript) —— Mouse_Over(this),最后添加了这一行鼠标点击的客户端事件处理函数 —— Item_Click(this)。
这样,我知道在aspx页内添加两个相关javascript的实现就可以啦。
var preId = "";
function Mouse_Over(item)
{
var preItem = document.getElementById(preId);
if(preItem != null)
preItem.setAttribute("bgcolor", "#ffffff", 0);
var id = item.getAttribute("id");
if( preId != id );
{
item.setAttribute("bgcolor", "AliceBlue", 0);
preId = id;
}
}
function Item_Click(item)
{
var record = [];
var id = item.getAttribute("id");
for(var i=0; i<item.cells.length; i++)
record[record.length] = item.cells[i].innerText;
var style = "dialogHeight: 170px; dialogWidth: 340px; dialogTop: 458px; dialogLeft: 166px; edge: Raised; center: Yes; help: no; resizable: no; status: no;";
var val = window.showModalDialog("detail.html", record, style);
if(val != null)
{
item.cells[0].innerText = val[0];
item.cells[1].innerText = val[1];
item.cells[2].innerText = val[2];
}
}
这个鼠标滑过的处理,当然还可以用css来做。 这里使用了javascript 来操作html元素, 通过setAttribute 和 getAttribute 方法来获取 html 元素的属性。
在点击某一行的事件处理里, 使用 showModalDialog() , showModalDailog方法里的第二个参数是父窗体向子窗体传递的值。 这个值可以是数组也可以是对象。 然后它的返回值呢, 是在子窗体里通过window.returnValue 来传递的。 当然这里的传递手段有好多, 比如: 你可以在showModalDialog里请求一个aspx页面, 通过querystring来传递参数。 也可以通过Session来传递(不建议使用Session)。
|

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=533117
我们来定制这个弹出的窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no')
file://写/成一行
-->
</SCRIPT>
参数解释:
<SCRIPT LANGUAGE="javascript"> js脚本开始;
window.open 弹出新窗口的命令;
'page.html' 弹出窗口的文件名;
'newwindow' 弹出窗口的名字(不是文件名),非必须,可用空''代替;
height=100 窗口高度;
width=400 窗口宽度;
top=0 窗口距离屏幕上方的象素值;
left=0 窗口距离屏幕左侧的象素值;
toolbar=no 是否显示工具栏,yes为显示;
menubar,scrollbars 表示菜单栏和滚动栏。
resizable=no 是否允许改变窗口大小,yes为允许;
location=no 是否显示地址栏,yes为允许;
status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;
</SCRIPT> js脚本结束
浙公网安备 33010602011771号