簡體   English   中英

System.IndexOutOfRangeException:在ASP.net中使用動態數據表列創建找不到列3。

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

我有一項工作需要在同一數據表中顯示靜態和動態列..以下是Gridview中的數據表列的說明...

第一列應該是復選框列,它是靜態的。第二列是用戶名列,它也是靜態的。

該列的其余部分需要從代碼中動態合並。

這是.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>

這是我在文件后面的代碼,該文件使用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();
}

但是它在問題的標題中給出了上述錯誤

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