ASP.NET网格视图:用鼠标高亮显示行,然后更新高亮显示的行
本文关键字:高亮 显示 然后 更新 鼠标 网格 NET 视图 ASP | 更新日期: 2023-09-27 18:00:59
所以我在互联网上搜索了这个问题的解决方案,但到目前为止还没有成功。我正在尝试基于ASP.NET中GridView中的"高亮显示"行更新SQL数据库。以下是我迄今为止高亮显示的代码。
//ASP.NET
// GridView1 Row DataBound event: adds selection functionality
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Attributes.Add("onmousedown", "IsMouseDown(this)");
e.Row.Attributes.Add("onmouseup", "IsMouseDown(this)");
e.Row.Attributes.Add("onmouseover", "HighlightRow(this)");
}
//Javascript
<script type="text/javascript">
var mousedown = false;
document.onselectstart = new Function ("return false")
function IsMouseDown(row) {
if (mousedown == false) mousedown = true;
else mousedown = false
if (mousedown == true) {
HighlightRow(row)
}
}
function HighlightRow(row) {
if (mousedown == true) {
if (row.className == 'gridHighlightedRow') {
row.className = 'gridNormalRow';
}
else {
row.className = 'gridHighlightedRow';
}
}
}
</script>
//CSS类
.gridNormalRow
{
background-color: #FFFFFF;
}
.gridHighlightedRow
{
background-color: #FFFFCC;
}
上面的代码运行得很好,问题是我不能对突出显示的行做任何事情,因为Javascript(根据我的理解(修改了tr标记,而不是实际的GridView类或BackColor。我到处寻找解决方案,我所需要做的就是从C#代码中找到一些可以访问的标识符来更新每一行。有人有什么想法吗?
快速编辑
实际上,我想过使用某种类型的隐藏字段,我只是不知道如何使用JavaScript来实现这一点,也不知道我需要做什么来执行Row.Attributes.Add((,使其保存到隐藏字段中。我能看到一些我需要做什么的例子吗(JavaScript不是我的强套件(
使用HiddenField存储高亮显示的行/记录的id。调用HighlightRow时,只需将选定的id添加到HiddenField。回发后,您可以在codebehind中读取其值。或者,您可以在行上使用属性,并为选定的行存储简单的布尔值。如何解决这个问题有很多选择。
所以我想明白了。它有点乱,但它一直有效,直到我完善我所拥有的。
首先,我将行索引发送到javascript
//C#
// GridView1 Row DataBound event: adds selection functionality
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
// Excludes row header and pager rows
if (e.Row.RowType != DataControlRowType.Header && e.Row.RowType != DataControlRowType.Pager)
{
e.Row.Attributes.Add("onmousedown", "IsMouseDown(this," + e.Row.RowIndex + ")");
e.Row.Attributes.Add("onmouseup", "IsMouseDown(this," + e.Row.RowIndex + ")");
e.Row.Attributes.Add("onmouseover", "HighlightRow(this," + e.Row.RowIndex + ")");
}
}
然后高亮显示,当mousedown为true时,我为鼠标悬停的每一行添加一个字符串。当mouseup事件触发时,我回发了字符串
//Javascript
<script type="text/javascript">
var mousedown = false;
var returnGrid = "";
document.onselectstart = new Function ("return false")
function IsMouseDown(row, index) {
if (mousedown == false) mousedown = true;
else mousedown = false
if (mousedown == true) {
HighlightRow(row, index)
}
else
{
__doPostBack("ReturnedIndexes", returnGrid);
}
}
function HighlightRow(row, index) {
if (mousedown == true) {
if (row.className == 'gridHighlightedRow') {
row.className = 'gridNormalRow';
returnGrid += (index + ",");
}
else {
row.className = 'gridHighlightedRow';
returnGrid += (index + ",");
}
}
}
</script>
最后,当页面加载"ReturnIndexes"事件目标时,我根据当前的行颜色设置行颜色
//C#
// Page load event
protected void Page_Load(object sender, EventArgs e)
{
// Avoids calling this code if the call is a postback
if (!IsPostBack)
{
// Some Code Here
}
else if(Request.Params.Get("__EVENTTARGET").ToString() == "ReturnedIndexes")
{
// Returns highlighted results
String ReturnIndexes = Request.Params.Get("__EVENTARGUMENT").ToString();
txtRowIndexes.Text = ReturnIndexes;
int[] GridIndex = RowHighlightChanged();
for (int i = 0; i < GridIndex.Length; i++)
{
if (GridView1.Rows[GridIndex[i]].CssClass == "gridHighlightedRow")
{
GridView1.Rows[GridIndex[i]].CssClass = "gridNormalRow";
}
else GridView1.Rows[GridIndex[i]].CssClass = "gridHighlightedRow";
}
}
}
最后,为了更新"高亮显示"的行,我只查找CssClass"gridHighlightedRow"。
//C#
// buttonUpdateSelected Click event: Updates all items currently selected in the grid view
protected void buttonUpdateSelected_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
if (row.CssClass == "gridHighlightedRow")
{
// Update Rows
}
}
}
我认为效果不错:(。
谢谢你的帮助托马斯,这让我开始走上正轨!