高分向高手求救asp.net中datagrid问题(技术含量比较高)

luoboqingcai 2005-04-12 05:46:44
我在我的模板列中加入了一个隐藏的chekbox列,我的问题是,怎样用代码去实现多选(server端和client端代码)。
当实现多选以后,怎么样时所选择的行前景色和背景色改变。
也就是说,当我选择以行后,行变黑边框颜色为白,当我再选时,也就是多选时,最后选的一行行变黑边框为白,而开始选的行是黑色,但是边框变无(或者黑色)。
我做多选的目的是批量操作,比如说批量删除,批量修改。
谢谢高手们帮忙,最好有代码(最好是vb的)。

谢谢大家,如果问题解决了,600分以内,要多少分给多少分。
...全文
240 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoboqingcai 2005-04-14
  • 打赏
  • 举报
回复
呵呵,谢谢大家,问题我解决了,但是这些分给大家。
我一共用了不到30行代码。
明天把代码贴上:)
谢谢大家。
rickjelly2004 2005-04-13
  • 打赏
  • 举报
回复
http://blog.csdn.net/rickjelly2004/archive/2004/12/16/218732.aspx
jhqjhq 2005-04-13
  • 打赏
  • 举报
回复
如果要批处理的话,再循环一次DataGrid就可以了
qweiop 2005-04-13
  • 打赏
  • 举报
回复
关注中~~
jhqjhq 2005-04-13
  • 打赏
  • 举报
回复
批处理,根据checkbox 的问题我做过啊。。
用循环遍利DataGird判断 ,然后 找到checkbox,改变它的属性就可以了。
其他的颜色之类的也根据checkbox的属性来改变。

代码参考,根据checkbox是否选择,来改变下面textbox列的显示。
public void dgMapDetail_SelectedIndexChanged(object sender, System.EventArgs e)
{
for(int i = 0 ; i < this.dgMapDetail.Items.Count;i++ )
{
bool flag = ((CheckBox)this.dgMapDetail.Items[i].Cells[4].FindControl("chkSelect")).Checked;
((TextBox)this.dgMapDetail.Items[i].Cells[5].FindControl("txtNumber")).Visible = flag;
if(flag == true)
((TextBox)this.dgMapDetail.Items[i].Cells[5].FindControl("txtNumber")).Text = "1";

}
}
guosheng9824 2005-04-13
  • 打赏
  • 举报
回复
同意飘肉
fantiny 2005-04-13
  • 打赏
  • 举报
回复
顶一下。
wuyongbiao 2005-04-13
  • 打赏
  • 举报
回复
高度关注 不蹭分
wwh207 2005-04-12
  • 打赏
  • 举报
回复
gz
Alden 2005-04-12
  • 打赏
  • 举报
回复
用javascript来实现较好,不防参考以下:
for(var i=0;i<mLen;i++)
{
if(document.forms(0).iptMsgID(i).checked)
{
mItemValue += document.forms(0).iptMsgID(i).value;
boolCheck = true;
if(i != mLen-1)
mItemValue += ","
}
}
「已注销」 2005-04-12
  • 打赏
  • 举报
回复
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Angushine.Web
{
/// <summary>
/// Summary description for Test.
/// </summary>
public class Test : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DropDownList ddl;
protected System.Web.UI.WebControls.CheckBox chkAll;
protected System.Web.UI.WebControls.DataGrid DataGrid1;

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGridItemCreated);
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGridItemCommand);
this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGridCancelCommand);
this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGridEditCommand);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGridItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
try
{
Display();
GetCategory(ddl);
this.chkAll.Attributes.Add("OnClick", "javascript:Select(this.checked)");
}
catch (Exception ex)
{
this.Response.Write("Error Message : " + ex.Message + "<br>");
}
}
}

private void Display()
{
SqlConnection conn = new SqlConnection("Server=localhost;Uid=sa;Pwd=hxh;Database=Northwind");
SqlDataAdapter da = new SqlDataAdapter("select p.ProductId, p.ProductName, c.CategoryName from Products p, Categories c where p.CategoryId=c.CategoryId", conn);
DataSet ds = new DataSet();
da.Fill(ds);

this.DataGrid1.DataSource = ds.Tables[0].DefaultView;
this.DataGrid1.DataBind();
}

private void GetCategory(DropDownList ddl)
{
SqlConnection conn = new SqlConnection("Server=localhost;Uid=sa;Pwd=hxh;Database=Northwind");
SqlDataAdapter da = new SqlDataAdapter("select * from Categories", conn);
DataSet ds = new DataSet();
da.Fill(ds);

ddl.DataSource = ds.Tables[0].DefaultView;
ddl.DataTextField = "CategoryName";
ddl.DataValueField = "CategoryId";
ddl.DataBind();
}

private void DataGridItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemIndex != -1)
{
ImageButton imgbtn = (ImageButton)e.Item.FindControl("imgbtnDelete");
imgbtn.Attributes.Add("onclick","javascript:return confirm('Are you sure to delete the record !')");

if (e.Item.ItemType == ListItemType.EditItem)
{
DropDownList ddl = (DropDownList)e.Item.Cells[2].FindControl("ddlCategoryName");
if (ddl != null)
{
//GetCategory((DropDownList)e.Item.FindControl("ddlCategoryName"));

SqlConnection conn = new SqlConnection("Server=localhost;Uid=sa;Pwd=hxh;Database=Northwind");
SqlDataAdapter da = new SqlDataAdapter("select * from Categories", conn);
DataSet ds = new DataSet();
da.Fill(ds);

ddl.DataSource = ds.Tables[0].DefaultView;
ddl.DataTextField = "CategoryName";
ddl.DataValueField = "CategoryName";
ddl.DataBind();
ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"CategoryName"))).Selected=true;//选择数据库内的作为默认
}
}
}
}

private void DataGridItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if (e.Item.ItemIndex != -1)
{
Response.Write(e.Item.Cells[0].Text);
Display();
}
}

private void DataGridEditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if (e.Item.ItemIndex != -1)
{
DataGrid1.EditItemIndex = e.Item.ItemIndex;
if (e.Item.Cells[2].FindControl("ddlCategoryName") != null)
{
((DropDownList)e.Item.FindControl("ddlCategoryName")).SelectedIndex = e.Item.ItemIndex;
}
Display();
}
}

private void DataGridCancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if (e.Item.ItemIndex != -1)
{
this.DataGrid1.EditItemIndex = -1;
Display();
}
}

private void DataGridItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemIndex != -1)
{
CheckBox chk = (CheckBox)e.Item.FindControl("chk");
if (chk != null)
{
e.Item.Attributes.Add("OnClick", "javascript:SelectRow(" + DataGrid1.ClientID + "__ctl" + (e.Item.ItemIndex + 3).ToString() + "_" + chk.ClientID + ".checked, this, " + DataGrid1.ClientID + ".offsetTop, " + DataGrid1.ClientID + ".offsetLeft);");
//chk.Attributes.Add("OnClick", "javascript:SelectRow(this)");
}
}
}

}
}
「已注销」 2005-04-12
  • 打赏
  • 举报
回复
<%@ Page language="c#" Codebehind="Test.aspx.cs" AutoEventWireup="false" Inherits="Angushine.Web.Test" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Test</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<LINK href="Css/Style.css" type="text/css" rel="stylesheet">
<script language="javascript">
<!--
function Enter()
{
if (event.keyCode == 13)
{
alert("Run");
}
}

function Select(select)
{
var obj = document.getElementsByTagName("input");
var str = "";
for (var i = 0; i < obj.length; i ++)
{
if(obj[i].type == "checkbox" && obj[i].name != "chkAll")
{
obj[i].checked = select;
}
}
}

function SelectRow(check, row, tableTop, tableLeft)
{
if (check)
{
var top = tableTop + row.offsetTop;
var left = tableLeft + row.offsetLeft;

document.all("div").runtimeStyle.cssText = "BORDER: #ff0066 1px solid; LEFT: " + left + "px; WIDTH: " + row.clientWidth + "px; POSITION: absolute; TOP: " + top + "px; HEIGHT: " + row.clientHeight + "px";

row.runtimeStyle.cssText = "background-color:#efefef;border:1px solid #ff0000;color:#ff0000;"
}
else
{
document.all("div").runtimeStyle.cssText = "BORDER-LEFT: #ffffff 1px solid";
row.runtimeStyle.cssText = "color:#990000;border:1px solid #cccccc";
}
}

function Color()
{
alert("asdfasd");
}
//-->
</script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:dropdownlist id="ddl" runat="server"></asp:dropdownlist><IMG id="imgVerifyCode" src="VerifyImage.aspx">
<asp:datagrid id="DataGrid1" runat="server" AllowPaging="True" AutoGenerateColumns="False" BorderStyle="Solid"
CellPadding="0" Width="100%">
<HeaderStyle Font-Bold="True" HorizontalAlign="Center"></HeaderStyle>
<Columns>
<asp:TemplateColumn>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<asp:CheckBox id="chk" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="ProductId" ReadOnly="True" HeaderText="ProductId"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="ProductName">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ProductName") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=txtProductName runat="server" BorderStyle="Groove" Text='<%# DataBinder.Eval(Container.DataItem, "ProductName") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="CategoryName">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=txtCategoryName runat="server" BorderStyle="Groove" Text='<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>'>
</asp:TextBox>
<asp:DropDownList id="ddlCategoryName" runat="server"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Operate">
<ItemTemplate>
<asp:ImageButton id="imgbtnChange" runat="server" ImageUrl="Image/btnChange.gif" CommandName="Edit"></asp:ImageButton>
<asp:ImageButton id="imgbtnDelete" runat="server" ImageUrl="Image/btnDelete.gif" CommandName="Delete"></asp:ImageButton>
<asp:ImageButton id="imgbtnCancel" runat="server" ImageUrl="Image/btnClose.gif" CommandName="Cancel"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn Visible="False" DataField="CategoryName"></asp:BoundColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:datagrid><asp:checkbox id="chkAll" runat="server" Text="Select All"></asp:checkbox>
<div id="div" ></div>
</form>
</body>
</HTML>
「已注销」 2005-04-12
  • 打赏
  • 举报
回复
javascript函数
function SelectRow(check, row)
{
if (check)
{
row.runtimeStyle.cssText = "background-color:#efefef;border:1px solid #ff0000;color:#ff0000;"
}
else
{
row.runtimeStyle.cssText = "color:#990000;border:1px solid #cccccc";
}
}


private void DataGridItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemIndex != -1)
{
CheckBox chk = (CheckBox)e.Item.FindControl("chk");
if (chk != null)
{
e.Item.Attributes.Add("OnClick", "javascript:SelectRow(" + DataGrid1.ClientID + "__ctl" + (e.Item.ItemIndex + 3).ToString() + "_" + chk.ClientID + ".checked, this);");
}
}
}

边框变颜色还没有找到比较好的方法
xzq686 2005-04-12
  • 打赏
  • 举报
回复
其实主要是在item绑定事件里面加上item的单击事件。
有一个类似一点的意思吧。。

Sub dgrd_itemcreated(ByVal s As Object, ByVal e As DataGridItemEventArgs)
Select Case e.Item.ItemType
e.Item.Attributes.Add("onmouseover", "this.style.backgroundColor='lightgreen'")
e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='white'")
End Sub

这个你就自己发挥吧。。
wjcking 2005-04-12
  • 打赏
  • 举报
回复
up
xzq686 2005-04-12
  • 打赏
  • 举报
回复
选择以行后,行变黑边框颜色为白CSS1
最后选的一行行变黑边框为白,CSS2
而开始选的行是黑色,但是边框变无(或者黑色)。CSS3
定义三个和你上面相对应的CSS

 页面中给一个全局变量selectRowCount当=0
点当datagrid当前行的时候,当前行checkBox选中,如果selectRowCount的值为0,把当前行的item的CSS改成CSS1(在C#中e.Item.CssClass,VB中改成相应的吧。),把selectRowCount加1。

别的动作就对应相应的CSS。


注:只是想法。实现不实现。楼主试试。
游戏Lan 2005-04-12
  • 打赏
  • 举报
回复
你有那么多分吗?
ypdff 2005-04-12
  • 打赏
  • 举报
回复
同意!!!!!
「已注销」 2005-04-12
  • 打赏
  • 举报
回复
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
try
{ //chkAll是一个CheckBox
this.chkAll.Attributes.Add("OnClick", "javascript:Select(this.checked)");
}
catch (Exception ex)
{
this.Response.Write("Error Message : " + ex.Message + "<br>");
}
}
}

然后在aspx文件中加入下面的javascript函数
function Select(select)
{
var obj = document.getElementsByTagName("input");
var str = "";
for (var i = 0; i < obj.length; i ++)
{
if(obj[i].type == "checkbox" && obj[i].name != "chkAll")
{
obj[i].checked = select;
}
}
}
jackymi 2005-04-12
  • 打赏
  • 举报
回复
放一个button 在里面循环所有的checkbox 选中的状态处理一下就行啦

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧