首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

:关于datagrid的简单有关问题

2012-01-29 
求助:关于datagrid的简单问题请问我在DataGrid对象Grid1中加入了一个checkbox模板列chk希望在页面提交时将

求助:关于datagrid的简单问题
请问我在DataGrid对象Grid1中加入了一个checkbox模板列chk   希望在页面提交时将被选选种的行对象保存进一个对象数组object[]   rowob中请问chk的OnCheckedChanged事件该如何写呀?谢谢各位了!

[解决办法]
ArrayList arrObject = new ArrayList();
for (int i = 0; i < DataGrid.Rows.Count; i++)
{
CheckBox cbs = DataGrid.Rows[i].Cells[0].FindControl( "sSelect ") as CheckBox;
if (cbs.Checked)
{
int sid = int.Parse(DataGrid.Rows[i].Cells[1].Text.ToString().Trim());
arrObject.Add(sid);
}
}
[解决办法]
just try this following demo:

<%@ Page Language= "C# " %>
<%@ Import Namespace= "System.Data " %>

<%--
http://community.csdn.net/Expert/TopicView3.asp?id=5650938
--%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">

<script runat= "server ">
void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
// 首次加载数据一定要放在 !IsPostBack 内,
// 避免回发的时候再次绑定数据,覆盖复选框状态
LoadProductData();
}
}

void chk_CheckedChanged(object sender, EventArgs e)
{
// 触发此事件的 CheckBox
CheckBox chk = sender as CheckBox;
// 得到 CheckBox 所在行
DataGridItem item = chk.NamingContainer as DataGridItem;
// 得到 DataGrid,当然这里可以直接引用控件ID
DataGrid grd = item.NamingContainer as DataGrid;
// 得到主键
int productId = (int)grd.DataKeys[item.ItemIndex];
Label lblProductName = item.FindControl( "lblProductName ") as Label;
Response.Write(item.ItemIndex);
Response.Write(lblProductName.Text);
// more codes
// ...
//System.Diagnostics.Debug.Assert(false, productId.ToString());
}

void LoadProductData()
{
DataTable dt = CreateProductTable();
DataGrid1.DataSource = dt;
DataGrid1.DataBind();
}

#region sample data

static DataTable CreateProductTable()
{
DataTable tbl = new DataTable( "Products ");

tbl.Columns.Add( "ProductID ", typeof(int));
tbl.Columns.Add( "ProductName ", typeof(string));
tbl.Columns.Add( "CategoryID ", typeof(int));
tbl.Columns.Add( "HasPic ", typeof(bool));
tbl.Columns.Add( "Reviewed ", typeof(bool));
DataRow row = tbl.NewRow();
row[0] = 1;
row[1] = "Chai ";
row[2] = 1;
row[3] = true;
row[4] = false;
tbl.Rows.Add(row);

row = tbl.NewRow();
row[0] = 2;
row[1] = "Chang ";
row[2] = 1;
row[3] = false;
row[4] = false;
tbl.Rows.Add(row);

row = tbl.NewRow();
row[0] = 3;
row[1] = "Aniseed Syrup ";
row[2] = 2;
row[3] = true;
row[4] = false;
tbl.Rows.Add(row);

row = tbl.NewRow();
row[0] = 4;
row[1] = "Chef Anton 's Cajun Seasoning ";
row[2] = 2;
row[3] = false;
row[4] = true;
tbl.Rows.Add(row);

row = tbl.NewRow();
row[0] = 5;


row[1] = "Chef Anton 's Gumbo Mix ";
row[2] = 2;
row[3] = true;
row[4] = true;
tbl.Rows.Add(row);

row = tbl.NewRow();
row[0] = 47;
row[1] = "Zaanse koeken ";
row[2] = 3;
row[3] = true;
row[4] = true;
tbl.Rows.Add(row);

row = tbl.NewRow();
row[0] = 48;
row[1] = "Chocolade ";
row[2] = 3;
row[3] = false;
row[4] = false;
tbl.Rows.Add(row);

row = tbl.NewRow();
row[0] = 49;
row[1] = "Maxilaku ";
row[2] = 3;
row[3] = true;
row[4] = false;
tbl.Rows.Add(row);

return tbl;
}

#endregion
</script>

<html xmlns= "http://www.w3.org/1999/xhtml " >
<head runat= "server ">
<title> Untitled Page </title>
</head>
<body>
<form id= "form1 " runat= "server ">
<div>
<asp:DataGrid ID= "DataGrid1 " runat= "server " AutoGenerateColumns= "true " DataKeyField= "ProductID ">
<Columns>
<asp:TemplateColumn HeaderText= "HasPic ">
<ItemTemplate>
<asp:label ID= "lblProductName " runat= "server " text= ' <%# Eval( "ProductName ") %> ' />
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox ID= "chk " runat= "server " AutoPostBack= "true " OnCheckedChanged= "chk_CheckedChanged " />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</div>
</form>
</body>
</html>


Good Luck!
[解决办法]
chk的OnCheckedChanged事件该如何写呀?
不好!非常不好!
提交事件:
ArrayList list = new ArrayList();
foreach(DataGridItem item in DataGrid1.Items)
{
CheckBox chk = (CheckBox)(item.FindControl( "chk "));
if(chk.Checked) list.Add(item);
}
[解决办法]
ArrayList MyArray = new ArrayList();
for (int i = 0; i < DataGrid.Rows.Count; i++)
{

if (((CheckBox)DataGrid.Rows[i].Cells[0].FindControl( "sSelect ")).Checked)
{
MyArray .Add(int.Parse(DataGrid.Rows[i].Cells[1].Text.ToString().Trim());
}
}
要先引用命名空间!

[解决办法]
一般而言,去写CheckBox的OnCheckedChanged这样的服务器端事件对用户是非常不友好的

热点排行