简体   繁体   English

System.IndexOutOfRangeException:在ASP.net中使用动态数据表列创建找不到列3。

[英]System.IndexOutOfRangeException: Cannot find column 3. with dynamic Datatable Column Creation in ASP.net

I have got a work where i need to show static and dynamic columns in same datatable ..Here is the description for the Datatable column in Gridview... 我有一项工作需要在同一数据表中显示静态和动态列..以下是Gridview中的数据表列的说明...

First column should be checkbox column and it is static.. Second column is Username column and it is also static.. 第一列应该是复选框列,它是静态的。第二列是用户名列,它也是静态的。

Rest of the column needs to be merged dynamically..from the code.. 该列的其余部分需要从代码中动态合并。

Here is the code..for the gridview in aspx.. 这是.aspx中的gridview的代码。

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"
                    AutoGenerateColumns="False" BackColor="LightGoldenrodYellow" BorderColor="Tan"
                    BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None" 
                    Width="477px">
                    <AlternatingRowStyle BackColor="PaleGoldenrod" />
                    <Columns>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:CheckBox ID="chkhdr" runat="server" />
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:CheckBox ID="chkChild" runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Username">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("col0") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Role(Admin)">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkAdmin" runat="server" Checked='<%# Eval("col1") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Role(DPAO User )">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkUser" runat="server" Checked='<%# Eval("col2") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Role(GeneralUser)">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkgen" runat="server" Checked='<%# Eval("col3") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

And here is my code behind file which is using Membership datatable of mssql to show the records in checked or unchecked mode in rows of the gridview 这是我在文件后面的代码,该文件使用mssql的Membership数据表在gridview的行中以选中或未选中模式显示记录

 protected void BindGridviewData()
{

    var role = from MembershipUser u in Membership.GetAllUsers()
               select new
               {
                   User = u.UserName,
                   Role = string.Join(",", Roles.GetRolesForUser(u.UserName))
               };


        DataTable dTable = new DataTable();

        string[] rolesarr = Roles.GetAllRoles();
        //int length = rolesarr.Count();

        for (int i = 0; i < rolesarr.Length; i++)
        {
            string colname = rolesarr[i];
            if (i == 0)
            {
                dTable.Columns.Add(colname, typeof(string));
            }
            else
            {
                dTable.Columns.Add(colname, typeof(bool));
            }
        }


    foreach (MembershipUser u in Membership.GetAllUsers())
    {
        DataRow dRow = dTable.NewRow();
        dRow[0] = u.UserName;

        string[] roles = Roles.GetRolesForUser(u.UserName);
        dRow[1] = roles.Contains("Admin") ? true : false;
        dRow[2] = roles.Contains("DPAO User") ? true : false;
        dRow[3] = roles.Contains("GeneralUser") ? true : false;
        dTable.Rows.Add(dRow);
    }
    GridView1.DataSource = dTable;
    GridView1.DataBind();
}

but it is giving the above mentioned error in the title of the problem 但是它在问题的标题中给出了上述错误

DataTable dTable = new DataTable();
string[] rolesarr = Roles.GetAllRoles();
// add column for user name 
dTable.Columns.Add("User Name", typeof(string));
// then add all the roles as columns 
Array.ForEach(rolesarr, r => dTable.Columns.Add(r));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM