抱歉,如果我在解释中犯了错误,我就是新手并且实习。
我有一个使用DevExpress的VB前端的Winforms应用程序。
它有一个表示DataTable的gridView。
GridView中的其中一列用于描述,我相信它是一个repositoryItemMemoEdit
列,它用于显示从几行到整段的文本。
我发现设置GridView.OptionsView.RowAutoHeight = True
允许我的行完整地显示文本,但有时文本太大了。
我正在寻找使行显示第一行或第二行的最佳方法,并通过鼠标悬停显示的工具提示显示文本的其余部分,或者显示更多并显示更少的按钮扩展和收缩行以适合文本或仅显示第一行。该解决方案甚至可以使第一行成为超链接并使其打开一个新的弹出窗口lol。
有人能指出我正确的方向吗?我在DevExpress上几乎一无所知,他们的大部分论坛答案都只是没有直观表示的代码块,所以我甚至看不出它是不是我正在寻找的......
谢谢。
编辑:TLDR:在GridView中,允许用户在需要时查看更多文本的最佳方法是什么?
答案 0 :(得分:0)
解决方案甚至可以使第一行成为超链接并使其打开一个新的弹出窗口。
订阅GridView.RowCellClick
事件,GridView.ShowingEditor
事件,并显示包含该单元格内容的XtraMessageBox
:
Imports DevExpress.XtraEditors
Imports DevExpress.XtraGrid.Views.Grid
Private Sub GridView1_RowCellClick(sender As Object, e As DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs) Handles GridView1.RowCellClick
If e.Column.Equals(GridView1.Columns("DesiredColumn")) Then
XtraMessageBox.Show(GridView1.GetFocusedDataRow()("DesiredColumn").ToString())
End If
End Sub
Private Sub GridView1_ShowingEditor(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles GridView1.ShowingEditor
If GridView1.FocusedColumn.Equals(GridView1.Columns("DesiredColumn")) Then
e.Cancel = True
End If
End Sub
答案 1 :(得分:0)
也许最好的方法是处理GridView.CustomDrawCell事件并在ToolTipController.GetActiveObjectInfo事件中手动处理。
private void GridView1_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
{
if (e.Column.FieldName == "DesiredColumn")
{
// handle display logic here, this is just POC
var row = GridView1.GetDataRow(e.RowHandle);
var text = row["DesiredColumn"].ToString();
if (text.Length > 100) {
e.DisplayText = text.Substring(0, 100) + "...";
e.Handled = true;
}
}
}
private void toolTipController1_GetActiveObjectInfo(object sender, ToolTipControllerGetActiveObjectInfoEventArgs e)
{
ToolTipControlInfo info;
var gv = this.GridControl1.GetViewAt(e.ControlMousePosition) as GridView;
if (gv == null)
{
return;
}
var hInfo = gv.CalcHitInfo(e.ControlMousePosition);
if ((e.SelectedControl is GridControl))
{
if (hInfo.InRowCell)
{
if (hInfo.Column == gv.Columns["DesiredColumn"])
{
var row = gv.GetDataRow(hInfo.RowHandle);
var text = row["DesiredColumn"].ToString;
info = new ToolTipControlInfo(this.GridControl1, text);
e.Info = info;
}
}
}
}