100 分 请教 ,选择的是那一行? DataGrid(主) 中做了一个模板列,模板列中设置了一个DataGrid (子),如何判断选择了 DataGrid(子)中的那一行?急! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --最主要是就是找到这个子grid,其它与正常的一样foreach(DataGridItem di in datagrid.items){ DataGrid dg=di.findControl("subgridname"); ....(对子datagrid处理) } 先获取DataGrid(主)的行号,列号,再用foreach 获取 DataGrid(子)的控件,根据控件的id 号,判断DataGrid(子)所在行把 huangkc(糊涂虫) 你的方法放在 主DataGrid 的 ItemCommand 事件中执行吗? 同二楼一样的DataGrid dg = e.Item.FindControl("DataGrid2");foreach(DataGridItem de in dg.Items){ //操作} 先获取DataGrid(主)的行号,列号,再用foreach 获取 DataGrid(子)的控件,根据控件的id 号,判断DataGrid(子)所在行把------------能有具体的代码吗?如何去的DataGrid主的行、列呢? huangkc(糊涂虫) 你的方法放在 主DataGrid 的 ItemCommand 事件中执行吗? DataGrid DataGrid1 = e.Item.FindControl("DataGrid2");foreach(DataGridItem de in DataGrid1.Items){ ...} D:\Inetpub\wwwroot\ZY_Net1\WebFrm_chkdoc_edit.aspx.cs(459): 无法将类型“System.Web.UI.Control”隐式转换为“System.Web.UI.WebControls.DataGrid”-------------------private void grid_m_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { DataGrid dg = e.Item.FindControl("grid_d");}报错了 private void grid_m_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){ Label zbhjlb =(Label)(e.Item.FindControl("Label4")); //FindControl查找放置在模板列得控件。..} 呵呵﹐肯定還要顯式轉換一下咯﹐從第二樓就看到這個問題﹐后面還跟了几樓照抄的﹐我心里就納悶呢﹐咋行呢﹖果然。。呵呵。。DataGrid dg = (DataGrid)e.Item.FindControl("grid_d"); 就是,楼上正解要这样DataGrid dg = (DataGrid)e.Item.FindControl("grid_d"); 谢谢上面几位DataGrid dg = (DataGrid)e.Item.FindControl("grid_d");这样是不报错的,可是,我如何知道点击的是 grid_d 的那一行呢?急呀 foreach(DataGridItem di in datagrid.items){ DataGrid dg=di.findControl("subgridname"); ....(对子datagrid处理) }一个两层的循环就可以达到你的效果的 什么意思啊?莫非你的子DataGrid还有按钮可点? DataGrid dg = (DataGrid)e.Item.FindControl("grid_d");这样是不报错的,可是,我如何知道点击的是 grid_d 的那一行呢? 什么意思啊?莫非你的子DataGrid还有按钮可点?----------------是的,老大,否则我如何知道选择的是那一行呢? private void grid_m_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){ DataGrid dg = (DataGrid)e.Item.FindControl("grid_d"); LinkButton lb1 = (LinkButton)dg.FindControl("rbsel"); tb_chk_note.Text = lb1.Text;}-------------我的代码是这样的,不报错,但是也得不到我想要的,急! 首先你的子DataGrid要类似这样<asp:DataGrid ID=grid_d Runat=server OnItemCommand="grid_d_ItemCommand"AutoGenerateColumns=False><Columns> <asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn> <asp:TemplateColumn HeaderText="test"> <ItemTemplate><asp:LinkButton ID=link1 Runat=server CommandName=link1 Text=showme></asp:LinkButton> </ItemTemplate></asp:TemplateColumn> </Columns></asp:DataGrid>后台:protected void grid_d_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){ if(e.CommandName == "showme") { string id = e.Item.Cells[0].Text;//这里获取你点击行的第一列的值 }}明白吗? 错了后台应该这样后台:protected void grid_d_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){ if(e.CommandName == "link1") { string id = e.Item.Cells[0].Text;//这里获取你点击行的第一列的值 }} 谢谢 stoneallen(我不想说,我很亲切) -------------------------------------protected void grid_d_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){ if(e.CommandName == "link1") { string id = e.Item.Cells[0].Text;//这里获取你点击行的第一列的值 }}-----------------关键是 grid_m 是主,grid_d 是子,grid_d 是在 grid_m模板列中做的,我都找不到,grid_d_ItemCommand 这个事件的声明,以及写事件代码的地方呀 因为rbsel属于grid_d,所以private void grid_m_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){ DataGrid dg = (DataGrid)e.Item.FindControl("grid_d"); //思路大体如此吧 foreach(DataGridItem di in dg.Items) { LinkButton lb1 = (LinkButton)dg.FindControl("rbsel"); tb_chk_note.Text = lb1.Text; }//思路大体如此吧} 一样的嘛,你注意看我的前台代码有个OnItemCommand="grid_d_ItemCommand",这里就是声明了子DataGrid的ItemCommand事件,如下<asp:TemplateColumn HeaderText="datagrid"> <ItemTemplate> <asp:DataGrid ID=grid_d Runat=server OnItemCommand="grid_d_ItemCommand"AutoGenerateColumns=False><Columns> <asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn> <asp:TemplateColumn HeaderText="test"> <ItemTemplate><asp:LinkButton ID=link1 Runat=server CommandName=link1 Text=showme></asp:LinkButton> </ItemTemplate></asp:TemplateColumn> </Columns></asp:DataGrid> </ItemTemplate> </asp:TemplateColumn> stoneallen(我不想说,我很亲切)------------------老大的思路不错,我用就报错,我看,问题的关键在于,我无法取得选择了子grid的那一行,而在主grid的ItemCommand时间中,也无法判断当前执行的命令对象的ID ! <asp:DataGrid ID=grid_d Runat=server OnItemCommand="grid_d_ItemCommand"AutoGenerateColumns=False>---------------------------------后台加上这个,前台就报错了 <asp:DataGrid ID=grid_d Runat=server OnItemCommand="grid_d_ItemCommand"AutoGenerateColumns=False>---------------------------------后台加上这个,前台就报错了--------------------------------谁叫你在后台加的,这个本来就是前台的 <asp:DataGrid ID=grid_d Runat=server OnItemCommand="grid_d_ItemCommand"AutoGenerateColumns=False>---------------------------------在 html 编辑里加的,在前台,没有地方加呀 我把我的测试代码发给你参考一下吧前台:<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns=False><Columns><asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn><asp:BoundColumn DataField="b" HeaderText="b"></asp:BoundColumn><asp:BoundColumn DataField="c" HeaderText="c"></asp:BoundColumn><asp:BoundColumn DataField="d" HeaderText="d"></asp:BoundColumn><asp:TemplateColumn HeaderText="test"><ItemTemplate><asp:Button ID=show CommandName="show" Runat=server Text=show></asp:Button></ItemTemplate></asp:TemplateColumn><asp:TemplateColumn HeaderText="datagrid"><ItemTemplate><asp:DataGrid ID=datagrid2 Runat=server OnItemCommand="DataGrid2_ItemCommand" AutoGenerateColumns=False><Columns><asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn><asp:BoundColumn DataField="b" HeaderText="b"></asp:BoundColumn><asp:BoundColumn DataField="c" HeaderText="c"></asp:BoundColumn><asp:BoundColumn DataField="d" HeaderText="d"></asp:BoundColumn><asp:TemplateColumn HeaderText="button"><ItemTemplate><asp:Button ID=showme Runat=server CommandName=showme Text=showme></asp:Button></ItemTemplate></asp:TemplateColumn></Columns></asp:DataGrid></ItemTemplate></asp:TemplateColumn></Columns></asp:DataGrid>后台:private void InitializeComponent(){this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);this.Load += new System.EventHandler(this.Page_Load);}private void Page_Load(object sender, System.EventArgs e){// 在此处放置用户代码以初始化页面if(!IsPostBack){GridBind(DataGrid1);}}private void GridBind(DataGrid dg){DataTable dt = new DataTable();DataColumn dc1 = new DataColumn();dc1.ColumnName = "a";dt.Columns.Add(dc1);DataColumn dc2 = new DataColumn();dc2.ColumnName = "b";dt.Columns.Add(dc2);DataColumn dc3 = new DataColumn();dc3.ColumnName = "c";dt.Columns.Add(dc3);DataColumn dc4 = new DataColumn();dc4.ColumnName = "d";dt.Columns.Add(dc4);DataRow dr;dr = dt.NewRow();dr["a"] = "a1";dr["b"] = "b1";dr["c"] = "c1";dr["d"] = "d1";dt.Rows.Add(dr);dr = dt.NewRow();dr["a"] = "a2";dr["b"] = "b2";dr["c"] = "c2";dr["d"] = "d2";dt.Rows.Add(dr);dg.DataSource = dt;dg.DataBind();}private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){if(e.CommandName == "show"){GridBind(((DataGrid)e.Item.FindControl("datagrid2")));}}protected void DataGrid2_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){if(e.CommandName == "showme"){Response.Write(e.Item.Cells[0].Text);//输出点击行的第一列的值}} 我这里的前台指的就是html,后台指的是.cs代码,明白吗? 再一次感谢 stoneallen(我不想说,我很亲切),我这个版只能100分,否则,至少是你一个人100分 foreach(DataGridItem di in datagrid.items){ DataGrid dg=di.findControl("subgridname"); ....(对子datagrid处理) }一个两层的循环就可以达到你的效果的不过我通常都用的Repeater. ASP.NET中iframe的问题~ LinkButton 控件问题求帮忙?? 想请教一个弱弱的问题。。。有点昏了。。。麻烦大家帮个忙啊。。 程序弹出Web窗口打开Excel,被Norton2008拦截关闭 请教更新数据时提示:指定的参数已超出有效值的范围的问题 GridView中的ButtonField绑定问题 菜菜的问题!!关于msmq和asp.net 怎么根据控件的ID得到页面的控件 asp.net 和 winform应用程序如何共享数据 dataGrid 的更新问题 aspx页如何引用CS文件变量 .net中有Page_Load事件,有没有关闭事件?高分在线等待
foreach(DataGridItem di in datagrid.items)
{
DataGrid dg=di.findControl("subgridname");
....(对子datagrid处理)
}
DataGrid dg = e.Item.FindControl("DataGrid2");
foreach(DataGridItem de in dg.Items)
{
//操作
}
------------
能有具体的代码吗?
如何去的DataGrid主的行、列呢?
foreach(DataGridItem de in DataGrid1.Items)
{
...
}
-------------------private void grid_m_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid dg = e.Item.FindControl("grid_d");
}报错了
{
Label zbhjlb =(Label)(e.Item.FindControl("Label4"));
//FindControl查找放置在模板列得控件。..
}
这样是不报错的,
可是,我如何知道点击的是 grid_d 的那一行呢?急呀
{
DataGrid dg=di.findControl("subgridname");
....(对子datagrid处理)
}
一个两层的循环就可以达到你的效果的
这样是不报错的,
可是,我如何知道点击的是 grid_d 的那一行呢?
----------------是的,老大,否则我如何知道选择的是那一行呢?
{
DataGrid dg = (DataGrid)e.Item.FindControl("grid_d");
LinkButton lb1 = (LinkButton)dg.FindControl("rbsel");
tb_chk_note.Text = lb1.Text;
}
-------------
我的代码是这样的,不报错,但是也得不到我想要的,急!
<asp:DataGrid ID=grid_d Runat=server OnItemCommand="grid_d_ItemCommand"
AutoGenerateColumns=False>
<Columns>
<asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="test">
<ItemTemplate>
<asp:LinkButton ID=link1 Runat=server CommandName=link1 Text=showme></asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns></asp:DataGrid>
后台:
protected void grid_d_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "showme")
{
string id = e.Item.Cells[0].Text;//这里获取你点击行的第一列的值
}
}
明白吗?
后台:
protected void grid_d_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "link1")
{
string id = e.Item.Cells[0].Text;//这里获取你点击行的第一列的值
}
}
-------------------------------------
protected void grid_d_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "link1")
{
string id = e.Item.Cells[0].Text;//这里获取你点击行的第一列的值
}
}
-----------------关键是 grid_m 是主,grid_d 是子,grid_d 是在 grid_m模板列中做的,我都找不到,grid_d_ItemCommand 这个事件的声明,以及写事件代码的地方呀
private void grid_m_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid dg = (DataGrid)e.Item.FindControl("grid_d");
//思路大体如此吧
foreach(DataGridItem di in dg.Items)
{
LinkButton lb1 = (LinkButton)dg.FindControl("rbsel");
tb_chk_note.Text = lb1.Text;
}//思路大体如此吧
}
<ItemTemplate>
<asp:DataGrid ID=grid_d Runat=server OnItemCommand="grid_d_ItemCommand"
AutoGenerateColumns=False>
<Columns>
<asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="test">
<ItemTemplate>
<asp:LinkButton ID=link1 Runat=server CommandName=link1 Text=showme></asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns></asp:DataGrid>
</ItemTemplate>
</asp:TemplateColumn>
stoneallen(我不想说,我很亲切)
------------------老大的思路不错,我用就报错,我看,问题的关键在于,我无法取得
选择了子grid的那一行,而在主grid的ItemCommand时间中,也无法判断
当前执行的命令对象的ID !
AutoGenerateColumns=False>
---------------------------------
后台加上这个,前台就报错了
AutoGenerateColumns=False>
---------------------------------
后台加上这个,前台就报错了--------------------------------谁叫你在后台加的,这个本来就是前台的
AutoGenerateColumns=False>
---------------------------------
在 html 编辑里加的,在前台,没有地方加呀
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns=False>
<Columns>
<asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn>
<asp:BoundColumn DataField="b" HeaderText="b"></asp:BoundColumn>
<asp:BoundColumn DataField="c" HeaderText="c"></asp:BoundColumn>
<asp:BoundColumn DataField="d" HeaderText="d"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="test">
<ItemTemplate>
<asp:Button ID=show CommandName="show" Runat=server Text=show></asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="datagrid">
<ItemTemplate>
<asp:DataGrid ID=datagrid2 Runat=server OnItemCommand="DataGrid2_ItemCommand" AutoGenerateColumns=False>
<Columns>
<asp:BoundColumn DataField="a" HeaderText="a"></asp:BoundColumn>
<asp:BoundColumn DataField="b" HeaderText="b"></asp:BoundColumn>
<asp:BoundColumn DataField="c" HeaderText="c"></asp:BoundColumn>
<asp:BoundColumn DataField="d" HeaderText="d"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="button">
<ItemTemplate>
<asp:Button ID=showme Runat=server CommandName=showme Text=showme></asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>后台:
private void InitializeComponent()
{
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
this.Load += new System.EventHandler(this.Page_Load);
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
GridBind(DataGrid1);
}
}
private void GridBind(DataGrid dg)
{
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn();
dc1.ColumnName = "a";
dt.Columns.Add(dc1);
DataColumn dc2 = new DataColumn();
dc2.ColumnName = "b";
dt.Columns.Add(dc2);
DataColumn dc3 = new DataColumn();
dc3.ColumnName = "c";
dt.Columns.Add(dc3);
DataColumn dc4 = new DataColumn();
dc4.ColumnName = "d";
dt.Columns.Add(dc4);
DataRow dr;
dr = dt.NewRow();
dr["a"] = "a1";
dr["b"] = "b1";
dr["c"] = "c1";
dr["d"] = "d1";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["a"] = "a2";
dr["b"] = "b2";
dr["c"] = "c2";
dr["d"] = "d2";
dt.Rows.Add(dr);
dg.DataSource = dt;
dg.DataBind();
}
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "show")
{
GridBind(((DataGrid)e.Item.FindControl("datagrid2")));
}
}
protected void DataGrid2_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName == "showme")
{
Response.Write(e.Item.Cells[0].Text);//输出点击行的第一列的值
}
}
,我这个版只能100分,否则,至少是你一个人100分
{
DataGrid dg=di.findControl("subgridname");
....(对子datagrid处理)
}
一个两层的循环就可以达到你的效果的
不过我通常都用的Repeater.