c# - 自动生成的 Gridview - 更改列宽

标签 c# asp.net gridview code-behind

我遇到麻烦了!

我动态地生成了很多 GridView ,其中的列具有动态值。 这些列始终相同。

我想知道如何设置此列的大小。

这是我的代码,我的努力。

    private void generateControls( List<List<DataRow>> grids)
    {
        DataTable dt = new DataTable();

        int i = 0;
        foreach (List<DataRow> lst in grids)
        {
            dt = lst.CopyToDataTable();

            GridView grv = new GridView();
            grv.AlternatingRowStyle.BackColor = System.Drawing.Color.FromName("#cccccc");
            grv.HeaderStyle.BackColor = System.Drawing.Color.Gray;

            grv.Width = new Unit("100%");
            //grv.RowStyle.Wrap = false;
            grv.RowStyle.Width = new Unit("100%");

            grv.ID = "grid_view" + i;
            grv.DataSource = dt;
            grv.DataBind();

          /*  grv.Columns[0].ItemStyle.Width = new Unit("5%");
            grv.Columns[1].ItemStyle.Width = new Unit("7%");
            grv.Columns[2].ItemStyle.Width = new Unit("12%");
            grv.Columns[3].ItemStyle.Width = new Unit("12%");
            grv.Columns[4].ItemStyle.Width = new Unit("7%");
            grv.Columns[5].ItemStyle.Width = new Unit("7%");
            grv.Columns[6].ItemStyle.Width = new Unit("23%");
            grv.Columns[7].ItemStyle.Width = new Unit("22%");
            grv.Columns[8].ItemStyle.Width = new Unit("5%");*/

            Label lblBlankLines = new Label();
            lblBlankLines.Text = "<br />";

            Panel panelGrid = new Panel();
            panelGrid.ID = "panel_grid" + i;


            Label lblTipo = new Label();
            string tipoOcorrencia = lst[0]["Ocorrência"].ToString();

           /* 
            * Capitalized
            * TextInfo myTI = new CultureInfo("pt-BR", false).TextInfo;

            string novoTipoOcorrencia = myTI.ToTitleCase(tipoOcorrencia);*/

            int quantidade = lst.Count;
            lblTipo.Text = " - " + tipoOcorrencia + ": " + quantidade;


            LinkButton lkBtn = new LinkButton();
            lkBtn.ID = "link_button" + i;
            lkBtn.Text = "Exibir | Ocultar";
            lkBtn.Attributes["onClick"] = "javascript:return ocultaGrid('" + panelGrid.ID + "'), false";

            panel_status.Controls.Add(lblBlankLines);
            panel_status.Controls.Add(lkBtn);
            panel_status.Controls.Add(lblTipo);


            panelGrid.Controls.Add(grv);

            panel_status.Controls.Add(panelGrid);

            panel_status.DataBind();

            i++;
        }
    }

我尝试获取列,但出现错误,告诉我索引访问无效。 我如何访问该 GridView 中的列?

最佳答案

使用 RowDataBound 事件处理程序:

计算您的索引并确保您没有尝试访问不存在的列。

查看链接示例:

http://msdn.microsoft.com/en-us/library/ms178296(v=vs.100).ASPX

grv.RowDataBound += grv_RowDataBound;

    private void grv_RowDataBound(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType == DataControlRowType.Header)
        {

                   e.Row.Cells[0].Width = new Unit("5%");
                   e.Row.Cells[1].Width = new Unit("7%");
                   e.Row.Cells[2].Width = new Unit("12%");
                   e.Row.Cells[3].Width = new Unit("12%");
                   e.Row.Cells[4].Width = new Unit("7%");
                   e.Row.Cells[5].Width = new Unit("7%");
                   e.Row.Cells[6].Width = new Unit("23%");
                   e.Row.Cells[7].Width = new Unit("22%");
                   e.Row.Cells[8].Width = new Unit("5%"); 
        }

    }

关于c# - 自动生成的 Gridview - 更改列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272840/

相关文章:

c# - Visual Studio 多个项目 C# 和 C++ 文档

asp.net - 将单个文件 aspx 转换为代码隐藏

android - 在不同的 Activity 或 Fragment 之间共享数据的正确方法是什么?

android - 如何在 GridView 中为 android 单词争夺拼图显示随机字母

jquery - 使用 JQuery Table Sorter 插件仅对一列进行排序

c# - 登录 session 未使用 WebRequest/Response 转移到新网页?

javascript - 使用 Javascript 将 blob 转换为 .doc、.docx、.xls 或 .txt 以在浏览器中查看而无需下载

c# - Sendgrid X-SMTP-API 在使用 EnableTemplateEngine 时返回错误

asp.net - 实体数据源中的 Like 运算符

c# - 重复 session ID