net webdeveloper,通常不制作任何 win32 应用程序。但现在我必须这样做。我有一个包含大约 2000 个条目的列表。每个条目都应显示为带有文本框的标签和另一个标签和图片。我用flowlayoutpanel做了这个,我对条目做了一个foreach,为每个条目制作了一个带有标签、文本框、标签和图片框的面板。
现在,当它超过 1000 个条目时,我遇到了渲染问题。所以我读过我应该使用列表视图或数据网格视图。
现在我有一个这样的datagridview:
DataGridView dgv = new DataGridView();
dgv.AutoSize = true;
dgv.ScrollBars = ScrollBars.Vertical;
System.Data.DataTable dt = new System.Data.DataTable();
DataColumn dc1 = new DataColumn("Code", typeof(string));
dc1.ReadOnly = true;
dt.Columns.Add(dc1);
dt.Columns.Add(new DataColumn("Quantity", typeof(int)));
DataColumn dc3 = new DataColumn("Price", typeof(string));
dc3.ReadOnly = true;
dt.Columns.Add(dc3);
dt.Columns.Add(new DataColumn("Image", typeof(Bitmap)));
foreach (Product pd in products)
{
DataRow dr = dt.NewRow();
dr["Code"] = pd.ProductCode;
dr["Quantity"] = pd.ProductQuantity;
dr["Price"] = "€ " + String.Format("{0:0,00}", pd.ProductResalePrice.ToString());
dr["Image"] = BitmapFromWeb(pd.ProductImage);
dt.Rows.Add(dr);
}
dt.AcceptChanges();
dgv.RowTemplate.Height = 50;
dgv.DataSource = dt;
但问题是 datagridview 上的位图真的很慢!我之前拥有的图片框选项和面板要快得多。我该如何解决这个问题?
第二个问题是:当我想跟踪第二列中所做的更改时,我需要哪个事件?
有一件事:图像在线可用,因此“pd.ProductImage”是一个网址
private static Bitmap BitmapFromWeb(string URL)
{
try
{
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
myResponse.Close();
return bmp;
}
catch (Exception ex)
{
return null; // if for some reason we couldn't get to image, we return null
}
}