【问题标题】:How to set DataGridView textbox column to multi-line?如何将 DataGridView 文本框列设置为多行?
【发布时间】:2009-10-13 12:19:41
【问题描述】:

如何让DataGridView中的“DataGridViewTextBoxColumn支持多行属性

【问题讨论】:

    标签: c# .net datagridview datagridviewcolumn


    【解决方案1】:

    您应该可以通过将DataGridViewTextBoxColumnDefaultCellStyleWrapMode 设置为true 来实现此目的。

    【讨论】:

    • 你还需要设置dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;this post
    • 请记住,如果您在表格中使用自定义单元格样式,则需要为每个要包装的样式指定 WrapMode,因为新样式默认为 false。
    【解决方案2】:

    我发现你需要在设计器中做两件事,以使文本单元格显示多行。正如Tim S. Van Haren所述,您需要将DefaultCellStyleWrapModeWrapMode 设置为true。尽管这确实使文本换行,但它不会使行扩展以显示第一行以外的任何内容。除了WrapModeDataGridViewAutoSizeRowsMode 必须设置为适当的DataGridViewAutoSizeRowsMode 枚举值。 DataGridViewAutoSizeRowsMode.AllCells 之类的值允许单元格垂直扩展并显示整个换行的文本。

    【讨论】:

    • 供参考,AutoSizeRowsModeDataGridView 的属性,需要设置为DataGridViewAutoSizeRowsMode.AllCells 之类的东西
    • 正如@BenScott 所说,DataGridView.AutoSizeRowsMode 不是布尔值,必须分配适当的DataGridViewAutoSizeRowsMode 枚举值。我将编辑答案以反映这一点。
    • 我还将 AlternatingRowsDefaultCellStyle.WrapMode 设置为 True 以使其工作。
    【解决方案3】:

    除了设置DefaultCellStyleWrapMode 之外,您还可以执行以下操作:

    1. 你需要捕捉GridView的EditingControlShowing事件
    2. 将 EventArgs 上的 Control 属性转换为您想要的类型(即文本框、复选框或按钮)
    3. 使用该转换类型,更改 Multiline 属性,如下所示:
    private void MyGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox TB = (TextBox)e.Control;
        TB.Multiline = true;            
    }
    

    【讨论】:

      【解决方案4】:
          int multilineht = 0;
          private void CustGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
          {
              multilineht = CustGridView.Rows[CustGridView.CurrentCell.RowIndex].Height;
              CustGridView.AutoResizeRow(CustGridView.CurrentCell.RowIndex, DataGridViewAutoSizeRowMode.AllCells);
          }
      
          private void CustGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
          {
              CustGridView.Rows[CustGridView.CurrentCell.RowIndex].Height = multilineht;
          }
      

      【讨论】:

        【解决方案5】:

        如果您只想为 DataGridView 的一列设置 Multiline 属性 你可以做

        dataGridView.Columns[0].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
        

        【讨论】:

        • 问题已于 11 年前回答,您真的认为您的回答比接受的更好吗?
        • @IgorGoyda 是的,因为创建者问题“如何为列创建多行属性”似乎没有答案。这就是我一直在寻找的,但在这里没有找到答案。他没有问如何为每一列制作它,所有答案都指向它。 3年前也有很多答案,所以我想知道你为什么对我这么粗鲁。
        • 我猜你错过了接受的答案,请仔细阅读。至于我,我看不出你的和接受的有什么区别。
        • 我想我也错过了接受的答案 - 特别是“DefaultCellStyle”组件。这清楚地列出了有效的示例代码,在这种情况下,它帮助我克服了我的绊脚石,所以 +1,即使是在原始海报发布 11 年之后。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-16
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 2015-04-16
        相关资源
        最近更新 更多