none
GridView禁止自动换行改怎么设? RRS feed

  • 问题

  • 表格里的东西比较多,结果就是单元格很多时候自动换行了,怎么来禁止自动换行,或多长时才换行
    2009年10月13日 1:15

答案

  • 可以的,在 ItemDataBound 事件中添加对应的 html 标记
    知识改变命运,奋斗成就人生!
    • 已标记为答案 scate233 2009年10月14日 9:39
    2009年10月14日 9:15
    版主
  • 2个方法:
    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <%@ Import Namespace="System.Data" %>
    
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        DataTable dt = new DataTable();
    
        dt.Columns.Add("Col1");
        dt.Columns.Add("Col2");
        dt.Columns.Add("Col3");
        dt.Columns.Add("Col4");
    
        string s = "1234567891234567891234567891234567 89123456789123456789123456789";
    
        dt.Rows.Add(new object[] { s, s, s, s });
    
        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();
      }
    
    
      protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
      {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          e.Row.Cells[0].Text = "<nobr>方法1:" + e.Row.Cells[0].Text + "</nobr>";
          e.Row.Cells[1].CssClass = "brk2";
        }
      }
    </script>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title></title>
      <style type="text/css">
        .brk1
        {
          word-wrap: break-word;
          word-break: break-all;
        }
         .brk2
        {    
          white-space:pre;
        }
      </style>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
        <asp:GridView ID="GridView1" Width="300px" runat="server" 
          AutoGenerateColumns="true" onrowdatabound="GridView1_RowDataBound">
        </asp:GridView>
      </div>
      </form>
    </body>
    </html>
    


    【孟子E章】
    • 已标记为答案 scate233 2009年10月14日 9:39
    2009年10月14日 9:15
    版主

全部回复

  • 你好!

    用 css 控制即可。

    <table width="100px" border="0" cellspacing="1" cellpadding="0">       
      <tr>
        <td width="100px" style="word-wrap:break-word;word-break:break-all;"  valign="bottom" >
       abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc
        </td>
      </tr>
    </table>

    知识改变命运,奋斗成就人生!
    • 已标记为答案 scate233 2009年10月13日 1:58
    • 取消答案标记 scate233 2009年10月14日 7:23
    2009年10月13日 1:26
    版主
  • xxy的好像是设置反了吧。
    【孟子E章】
    2009年10月13日 2:46
    版主
  • 试验了下,发现只是在最后一列没有自动换行,中间那些还是换行了
    我的GridView是直接绑定过来的

    2009年10月14日 7:25
  • 你好!

    你看看 HTML 源代码确定一下你是否最后一列也加上了同样的 style

    知识改变命运,奋斗成就人生!
    2009年10月14日 7:28
    版主
  • 应该不关html的事吧,GridView是在表格的一个td里,而上面那句设风格是设了这个放GridView的td,结果出来的效果就是GridView的最后一列如所希望的没有自动换行,而其他列还是切成了很多行,对于GridView并没有单独设置

    2009年10月14日 7:53
  • 不太明白,可否帖出你的源代码呢?
    知识改变命运,奋斗成就人生!
    2009年10月14日 7:55
    版主
  • <tr>
                    <td colspan="1" class="style73">
                        </td>
                    <td colspan="9";style="word-wrap:break-word;word-break:break-all;"
                        class="style73">
                        <asp:Panel ID="Panel1" runat="server" Height="264px" ScrollBars="Both"
                            Width="822px">
                            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                            <Triggers>
                              <asp:AsyncPostBackTrigger ControlID="btQry" EventName="Click" />
                             </Triggers>

                                <ContentTemplate>
                                    <asp:GridView ID="custgv" runat="server" BackColor="White"
                            BorderColor="#E7E7FF" BorderStyle="None"
        BorderWidth="1px" CellPadding="3"
                            GridLines="Horizontal" Width="809px">
                                        <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" Wrap="False" />
                                        <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                                        <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
                                        <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7"
                                Wrap="False" />
                                        <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                                        <AlternatingRowStyle BackColor="#F7F7F7" />
                                    </asp:GridView>
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </asp:Panel>
                    </td>
                </tr>

    2009年10月14日 8:12
  • 数据
    DataSet dt = new DataSet();

                dtset.Fill(dt);

                if (dt.Tables[0].Rows.Count == 0)
                    return;         

                custgv.DataSource = dt.Tables[0].DefaultView;

     


                custgv.DataBind();

    2009年10月14日 8:15
  • <%@ Page Language="C#" AutoEventWireup="true"%>
    <%@ Import Namespace="System.Data" %>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
    
            dt.Columns.Add("Col1");
            dt.Columns.Add("Col2");
            dt.Columns.Add("Col3");
    
            string s = "123456789123456789123456789123456789123456789123456789123456789";
    
            dt.Rows.Add(new object[] { s, s, s });
    
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
    
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Style.Add("word-wrap", "break-word");
                e.Row.Style.Add("word-break", "break-all");
            }
        }
    </script>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" Width="300px" runat="server" 
                onrowdatabound="GridView1_RowDataBound">
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>

    知识改变命运,奋斗成就人生!
    2009年10月14日 8:26
    版主
  • 没看明白。
    你是要禁止自动换行?还是要自动换行啊?

    禁止自动换行就是内容显示在一行内

    【孟子E章】
    2009年10月14日 8:43
    版主
  • 刚试验了下,没有效果,还是换行了
    2009年10月14日 8:46
  • 使用下面的方法:
    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <%@ Import Namespace="System.Data" %>
    
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        DataTable dt = new DataTable();
    
        dt.Columns.Add("Col1");
        dt.Columns.Add("Col2");
        dt.Columns.Add("Col3");
    
        string s = "123456789123456789123456789123456789123456789 123456789123456789";
    
        dt.Rows.Add(new object[] { s, s, s });
    
        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();
      }
    
    
    </script>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
        <asp:GridView ID="GridView1" Width="300px" runat="server" AutoGenerateColumns="false">
          <Columns>
            <asp:TemplateField>
              <ItemTemplate>
                <nobr>不自动换行的内容:<%#Eval("Col3") %></nobr>
              </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
              <ItemTemplate>
                自动换行的内容:<%#Eval("Col2") %>
              </ItemTemplate>
            </asp:TemplateField>
          </Columns>
        </asp:GridView>
      </div>
      </form>
    </body>
    </html>
    


    【孟子E章】
    2009年10月14日 8:48
    版主
  • 我是要禁止自动换行,我再去试试
    2009年10月14日 9:02
  • 报歉,理解成自动换行了,请使用孟老师的方法是可行的。
    知识改变命运,奋斗成就人生!
    2009年10月14日 9:05
    版主
  • 方法2:
    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <%@ Import Namespace="System.Data" %>
    
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        DataTable dt = new DataTable();
    
        dt.Columns.Add("Col1");
        dt.Columns.Add("Col2");
        dt.Columns.Add("Col3");
    
        string s = "1234567891234567891234567891234567 89123456789123456789123456789";
    
        dt.Rows.Add(new object[] { s, s, s });
    
        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();
      }
    
    
    </script>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title></title>
      <style type="text/css">
        .brk1
        {
          word-wrap: break-word;
          word-break: break-all;
        }
         .brk2
        {    
          white-space:pre;
        }
      </style>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
        <asp:GridView ID="GridView1" Width="300px" runat="server" AutoGenerateColumns="false">
          <Columns>
            <asp:TemplateField>
             <ItemStyle CssClass="brk2" />
              <ItemTemplate>
                不自动换行的内容:<%#Eval("Col3") %>
              </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
              <ItemStyle CssClass="brk1" />
              <ItemTemplate>
                自动换行的内容:<%#Eval("Col2") %>
              </ItemTemplate>
            </asp:TemplateField>
          </Columns>
        </asp:GridView>
      </div>
      </form>
    </body>
    </html>
    


    【孟子E章】
    2009年10月14日 9:07
    版主
  • 有个问题,我的数据是直接绑出来的,因为查询条件的原因在搜索之前不知道会到底总共有多少列,可以在绑完后再设吗?
    2009年10月14日 9:10
  • 可以啊的
    【孟子E章】
    2009年10月14日 9:12
    版主
  • 可以的,在 ItemDataBound 事件中添加对应的 html 标记
    知识改变命运,奋斗成就人生!
    • 已标记为答案 scate233 2009年10月14日 9:39
    2009年10月14日 9:15
    版主
  • 2个方法:
    <%@ Page Language="C#" AutoEventWireup="true" %>
    
    <%@ Import Namespace="System.Data" %>
    
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        DataTable dt = new DataTable();
    
        dt.Columns.Add("Col1");
        dt.Columns.Add("Col2");
        dt.Columns.Add("Col3");
        dt.Columns.Add("Col4");
    
        string s = "1234567891234567891234567891234567 89123456789123456789123456789";
    
        dt.Rows.Add(new object[] { s, s, s, s });
    
        this.GridView1.DataSource = dt;
        this.GridView1.DataBind();
      }
    
    
      protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
      {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
          e.Row.Cells[0].Text = "<nobr>方法1:" + e.Row.Cells[0].Text + "</nobr>";
          e.Row.Cells[1].CssClass = "brk2";
        }
      }
    </script>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title></title>
      <style type="text/css">
        .brk1
        {
          word-wrap: break-word;
          word-break: break-all;
        }
         .brk2
        {    
          white-space:pre;
        }
      </style>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
        <asp:GridView ID="GridView1" Width="300px" runat="server" 
          AutoGenerateColumns="true" onrowdatabound="GridView1_RowDataBound">
        </asp:GridView>
      </div>
      </form>
    </body>
    </html>
    


    【孟子E章】
    • 已标记为答案 scate233 2009年10月14日 9:39
    2009年10月14日 9:15
    版主
  • 一个衍生问题,在绑定好后设某列的宽度好像不起作用?
    e.Row.Cells[8].Width = 1;
    2009年10月14日 9:41
  • 没有看到效果的原因是你单元格的内容把宽度涨开了。
    知识改变命运,奋斗成就人生!
    2009年10月14日 9:57
    版主
  • 能不能把某列隐藏起来,仅后台可见?

    2009年10月14日 10:23
  • 能不能把某列隐藏起来,仅后台可见?


    后台? 那创建两个不同的gridview就行了
    2009年10月14日 11:02
  • 再次试验,Visible 设false可以隐藏了,但是要在绑定后事件连grid的标头一起隐藏

    2009年10月15日 3:18