今天早些时候,我在这里建议使用DataGridView打印需要单个标记作为读取的消息。
我遵循了这个建议,在网上阅读后,我设法将它绑定到我的消息列表,并在调整后得到以下结果。
alt text http://img237.imageshack.us/img237/3015/datagridview.jpg
目前我有2个问题,第一个是我没有找到一种方法来调整行高以显示完整的消息,第二个是当列表更新时,DataGridView不显示修改。
任何解决这两个问题的方法?或者我是否需要使用DataGridView以外的东西,在这种情况下我应该使用什么?
此外,有没有办法让邮件中包含的网址变为可点击并在默认浏览器中打开?
修改 有关绑定的更多信息。
基本上我在表单中有一个类变量,我用一个按钮进行初始绑定。
private void button1_Click(object sender, EventArgs e)
{
list.Add(new Class1() { Message = "http://www.google.com/", Read = false });
list.Add(new Class1() { Message = "Message way too long to fit in this small column width", Read = false });
dataGridView1.DataSource = list;
}
然后我有另一个按钮添加更多条目只是为了测试它,我知道列表已正确更新,但dataGridView没有变化。
编辑2
如果我在需要修复宽度之前不清楚,并且包含要放大的长文本的单元格高度并以2行显示文本
答案 0 :(得分:1)
您是否使用智能标记检查了 EditColumn 中的选项?
希望这会有所帮助
答案 1 :(得分:0)
我会采取刺,看看我是否可以提供帮助。
首先关闭行高。有两个名为AutoResizeRow和AutoResizeRows的DataGridView方法,它们将调整行的高度以适应内容。
您能告诉我们您如何将数据绑定到DataViewGrid以及如何修改数据?这将有助于修改而不是更新。
至于链接,遗憾的是我似乎找不到一个本地处理这种事情的对象。很可能你首先要确定进入DataGridView的文本是否是一个链接(使用正则表达式,如果你是我)。其次,在DataGridView中以不同方式显示它(强调它,使其变为蓝色)。第三,在其上放置一个click事件,当单击该单元格时,将其抛出到浏览器中。我会进一步了解它,因为这似乎是很多工作(我会保持手指交叉,有人知道比我更好)。
答案 2 :(得分:0)
关于不更新的清单;有两个问题;
要注意添加/删除,您需要列表绑定事件。最简单的方法是确保使用BindingList<YourClass>
而不是List<YourClass>
。
要注意对各个属性的更改(在此上下文中),您需要在类型上实现INotifyPropertyChanged
:
public class YourClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
private string message;
public string Message
{
get { return message; }
set { message = value; OnPropertyChanged("Message"); }
}
public bool isRead;
[DisplayName("Read")]
public bool IsRead
{
get { return isRead; }
set { isRead = value; OnPropertyChanged("IsRead"); }
}
}
显示绑定到列表的示例:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
BindingList<YourClass> list = new BindingList<YourClass>();
DataGridView grid = new DataGridView();
grid.Dock = DockStyle.Fill;
grid.DataSource = list;
Button add = new Button();
add.Text = "Add";
add.Dock = DockStyle.Bottom;
add.Click += delegate
{
YourClass newObj = new YourClass();
newObj.Message = DateTime.Now.ToShortTimeString();
list.Add(newObj);
};
Button edit = new Button();
edit.Text = "Edit";
edit.Dock = DockStyle.Bottom;
edit.Click += delegate
{
if (list.Count > 0)
{
list[0].Message = "Boo!";
list[0].IsRead = !list[0].IsRead;
}
};
Form form = new Form();
form.Controls.Add(grid);
form.Controls.Add(add);
form.Controls.Add(edit);
Application.Run(form);
}