我使用主从DataGrid,主要代码如下:// aspx文件 --------------------------------------------------------------------------------<asp:datagrid id="dgdCarGroup" runat="server" Width="100%" HeaderStyle-backColor="#FF9900" AutoGenerateColumns="False" ShowHeader="False">
<AlternatingItemStyle BackColor="#FEFFEF"></AlternatingItemStyle>
<HeaderStyle BackColor="#FF9900"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="ID"></asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton ID="lbnTitles" Runat="server" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.ID") %>' CommandName="titles" Text='<%# DataBinder.Eval(Container,"DataItem.Titles") %>'>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn Visible="False">
<ItemStyle Width="15px"></ItemStyle>
<ItemTemplate>
<asp:CheckBox ID="chkGroup" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton ID="lbnModifyCarGroup" Runat="server" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.ID") %>' CommandName="edit" Text="Modifier">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton ID="lbnDeleteCarGroup" Runat="server" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.ID") %>' CommandName="dele" Text="Supprimer">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemStyle Width="20px"></ItemStyle>
<ItemTemplate>
<asp:ImageButton ImageUrl="../images/upper/moveup.gif" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.IndexID") %>' CommandName="moveUp" ID="ibtMoveUP" Runat="server"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemStyle Width="18px"></ItemStyle>
<ItemTemplate>
<asp:ImageButton ImageUrl="../images/upper/moveDown.gif" CommandArgument='<%# DataBinder.Eval(Container,"DataItem.IndexID") %>' CommandName="moveDown" ID="ibtMoveDown" Runat="server"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>// .cs文件 --------------------------------------------------------------------------------------
string SqlGroup = "select id,Titles from T_CarGroup ";
string SqlCar = "select CarID,Titles,'../PDF/' + PDFPath as PDFPath,GroupID  from T_Car ";

SqlGroup = SqlGroup + " order by ID";
SqlCar = SqlCar + " order by GroupID";string SqlAll = SqlGroup + ";" + SqlCar;


// - fill Ds and relation ds ------------------------------------------
string ConnStr = objFun.ConnStr.ToString();
SqlConnection conn = new SqlConnection(objFun.ConnStr.ToString());
conn.Open();
DataSet ds = new DataSet();
SqlDataAdapter ad = new SqlDataAdapter(SqlAll,conn) ;
ad.Fill(ds);
conn.Close();

ds.Tables[0].TableName = "Group";
ds.Tables[1].TableName = "Car";DataColumn Parent = ds.Tables["Group"].Columns["ID"];
DataColumn Child = ds.Tables["Car"].Columns["GroupID"];DataRelation rela = new DataRelation("rela",Parent,Child,false);
ds.Relations.Add(rela);this.dgdSearchGroup.DataSource = ds.Tables["Group"].DefaultView;
this.dgdSearchGroup.DataBind();
if (this.dgdSearchGroup.Items.Count == 0)
{
//this.dgdCar.Visible = false;
this.dgdSearchGroup.Visible = false;
this.btnBackCarGroup.Visible = false;
this.lblCarMessage.Text = "Objet introuvable!";
}
else
{
this.btnBackCarGroup.Visible = true;
this.lblCarMessage.Text = "";

}基本上代码是按孟子E章的例子来写的,但现在我要给子DataGrid添加ItemCommand事件,以调用下面的方法,protected void dgdCar_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
try
{
string flag = e.CommandName.ToString();
switch(flag)
{
case "edit": // - edit -----------
{
this.tbCarMess.Visible = false;
this.tbNewCar.Visible = true;
this.tbNewCar.Style["POSITION"]="absolute";
this.tbNewCar.Style["LEFT"] = "100px";
this.tbNewCar.Style["TOP"] = "100px";
this.btnSubmit.CommandArgument = e.CommandArgument.ToString();

this.drpCarGroup.SelectedValue = ((DataGrid)source).Items[e.Item.ItemIndex].Cells[2].Text;
this.txtNewCar.Text = ((DataGrid)source).Items[e.Item.ItemIndex].Cells[1].Text;
this.lblPath.Text = ((HyperLink)((DataGrid)source).Items[e.Item.ItemIndex].Cells[3].FindControl("hlkPDF")).NavigateUrl.ToString();


break;
}
case "dele": // - delete ------------
{
this.tbCarMess.Visible = false;
this.tbWaring.Visible = true;
this.btnOk.CommandArgument = e.CommandArgument.ToString();
this.btnOk.CommandName = "Car";
break;
}
}
}
catch(Exception err)
{
string err1 = err.Message.Replace("\n","");
err1 = err1.Replace("\r","");
Response.Redirect("../Error.aspx?Message=" + err1,false);
}
}不知如何实现?
找了很多资料,都没提到这个解决方法,我用下面的代码循环一次主DataGrid,给子DataGrid订阅事件也不行,
// - delegate event to dgdCar.
for (int i=0;i<this.dgdSearchGroup.Items.Count;i++)
{
((DataGrid)this.dgdSearchGroup.Items[i].Cells[0].FindControl("dgdCar")).ItemCommand +=new DataGridCommandEventHandler(dgdCar_ItemCommand);
}请高手指点.....