net webdeveloper и обычно не делайте никаких приложений win32. но теперь я должен. У меня есть список с около 2000 записей. каждая запись должна отображаться как метка с текстовым полем с другой меткой и изображением. я сделал это с flowlayoutpanel, и я сделал foreach в записях, чтобы сделать панель для каждой записи с меткой, текстовым полем, ярлыком и кадром.winform .net лучший способ, если вы хотите отображать изображения в datagridview
теперь у меня есть проблемы с рендерингом, когда он превышает 1000 записей. , поэтому я прочитал, что должен использовать listview или datagridview.
теперь у меня есть 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 очень медленно! опцию Picturebox и панели, которые у меня были раньше, где намного быстрее. как я могу это решить?
Второй вопрос: какое событие мне нужно, когда я хочу отслеживать изменения, сделанные во 2-й колонке?
вл одно: изображения онлайн доступны, так что «pd.ProductImage» является URL
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
}
}
благодаря jmserv но я новичок, когда дело доходит до кодирования win32. что вы имеете в виду под контролем. и вы знаете, как отслеживать изменения в текстовом поле 2-го столбца –
hello jmservera, это намного быстрее, но он показывает почти на каждой строке одно и то же изображение. я новичок в потоковом ... извините –
, тогда просмотрите, что вы отправляете в свой битмапфромный код, я не тестировал код, который я написал только как псевдокод C#. – jmservera