<ASP:DATAGRID id="MyDataGrid" runat="server" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"
BackColor="White" CellPadding="3" AutoGenerateColumns="False" PageSize="10" AllowCustomPaging="True"
Width="100%">
<FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#669999"></SelectedItemStyle>
<AlternatingItemStyle CssClass="DataGridAltIttemStyle"></AlternatingItemStyle>
<ItemStyle CssClass="DataGridItemStyle"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" CssClass="DataGridHeaderStyle"></HeaderStyle>
<Columns>

<asp:TemplateColumn HeaderText="名称">
<ItemTemplate>
<asp:Label ID="Name" Runat=server Text='<%#DataBinder.Eval(Container, "DataItem.Name").ToString()%>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="层ID">
<ItemTemplate>
<asp:TextBox id="DivId" width="200" Text='<%#DataBinder.Eval(Container, "DataItem.DivId").ToString()%>' Runat="server">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="权限">
<ItemTemplate>
<!-- 根据字串符分割来动态增加GataGrid模板列的checkboxlist的名称和值 -->
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</ASP:DATAGRID>



   private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
  //得出myIList;
  MyDataGrid.DataSource = myIList;
  MyDataGrid.DataBind();

}
}

myIList的值有Name,DivId和PurView,正常绑定到DataGrid,如<%#DataBinder.Eval(Container, "DataItem.DivId").ToString()%>

其中<%#DataBinder.Eval(Container, "DataItem.PurView").ToString()%>的值形式如下:

增加$$$Addnew|编辑$$$Modify|
增加$$$Addnew|
增加$$$Addnew|编辑$$$Modify|查询$$$Query|
....
长度可能,总是以$$$和|来分隔。


现在求
<asp:TemplateColumn HeaderText="权限">
<ItemTemplate>
<!-- 根据字串符分割来动态增加GataGrid模板列的checkboxlist的名称和值 -->
</ItemTemplate>
</asp:TemplateColumn>

上面根据<%#DataBinder.Eval(Container, "DataItem.PurView").ToString()%>的值形式来动态以"|"生成这个列的checkboxlist,其中名称对应$$$前面,值为$$$后的字符。


谢谢!

解决方案 »

  1.   

    可以使用ItemDataBound事件 动态添加
    参考:
    http://community.csdn.net/Expert/topic/4102/4102652.xml?temp=.805874里面使用的是RadioButtonList,自己改一下就好了
      

  2.   

    <ASP:DATAGRID id="MyDataGrid" runat="server" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"
    BackColor="White" CellPadding="3" AutoGenerateColumns="False" PageSize="10" AllowCustomPaging="True"
    Width="100%">
    <FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#669999"></SelectedItemStyle>
    <AlternatingItemStyle CssClass="DataGridAltIttemStyle"></AlternatingItemStyle>
    <ItemStyle CssClass="DataGridItemStyle"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="White" CssClass="DataGridHeaderStyle"></HeaderStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="名称">
    <ItemTemplate>
    <asp:Label ID="Name" Runat=server Text='<%#DataBinder.Eval(Container, "DataItem.sID").ToString()%>'>
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="层ID">
    <ItemTemplate>
    <asp:TextBox id="DivId" width="200" Text='<%#DataBinder.Eval(Container, "DataItem.sQustion").ToString()%>' Runat="server">
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="权限">
    <ItemTemplate>
    <asp:CheckBoxList ID="cbl" Runat="server"></asp:CheckBoxList>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </ASP:DATAGRID>
    private void MyDataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    /**/
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    CheckBoxList cblt = (CheckBoxList)e.Item.FindControl("cbl");
    string strOption = ((DataRowView)e.Item.DataItem).Row.ItemArray[2].ToString();
    string[] tmpOption = strOption.Split('|');
    for(int i = 0; i<tmpOption.Length;i++)
    {
    cblt.Items.Add(tmpOption[i]);
    }
    }
    }