2012-03-14 5 views
1

У меня есть DatagridView с источником данных, но мой datagridview рисует только 1 строку.DataGridView только 1 показать 1 строку

Мой код что-то вдоль этих линий:

Декларация Список

List<Texture> LoadedTextures = new List<Texture>(); 

Custum Datasource Объект

public class Texture 
{ 
    public Image Image { get; set; } 
    public string Name { get; set; } 
} 

Добавление Метод

private void LoadImage(string FileName) 
{ 
    FileInfo file = new FileInfo(FileName); 

    if (LoadedTextures.Count > 0 && 
     LoadedTextures.Where(x => x.Name == file.Name).Count() > 0) 
    { 
     MessageBox.Show("Already a texture with that name", "error", 
      MessageBoxButtons.OK, MessageBoxIcon.Error); 
     return; 
    } 
    Bitmap newImage = new Bitmap(CurrLevel.TileWidth, CurrLevel.TileHeight); 
    using (Graphics gr = Graphics.FromImage(newImage)) 
    { 
     gr.SmoothingMode = SmoothingMode.AntiAlias; 
     gr.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     gr.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     gr.DrawImage(Image.FromFile(FileName), 
      new Rectangle(0, 0, CurrLevel.TileWidth, CurrLevel.TileWidth)); 
    } 
    var text = new Texture 
    { 
     Image = (Image)newImage, 
     Name = file.Name 
    }; 
    LoadedTextures.Add(text); 
    if(Tiles.DataSource == null)Tiles.DataSource = LoadedTextures; 
} 

При отладке я также заметил, что мой Datasource содержит загруженные элементы, но datagridview рисует только одну строку.

P.S: Я попытался, DataGridView.Refresh(), DataGridView.RefreshEdit(), назначая источник данных каждый раз при внесении изменений, но ни одна из них не помогла.

ответ

1

Использование привязанного списка для меня (используется событие изменения для обновления списка), Tnx для всех рассылок.

0

Предполагая, что это веб-приложение, я попытался следующие, чтобы подтвердить одну из моих подозрений:

List<int> myList = new List<int>(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      for (int i = 0; i < 10; i++) 
       myList.Add(i); 
     } 
    } 

    protected void btn_AddItem_Click(object sender, EventArgs e) 
    { 
     myList.Add(10); 
     Console.Write(myList.Count()); //always prints "1" 
    } 

Список теряет все свои пункты, которые это то, что я предполагаю, что происходит с вами. Что касается того, как это исправить, я не уверен, но, по крайней мере, он сузил источник вашей проблемы.

Если это не веб-приложение, то извините, поскольку я не знаком с продолжительностью жизни других типов приложений.

+0

Мое приложение - приложение для Windows Form, я также добавил кнопку для проверки количества и добавления нового элемента, счетчик которого увеличивается, но он все еще отображает 1 строку – Svexo

0

Я думаю, что ваша проверка, если DataSource является недействительным, вероятно, вопрос:

if(Tiles.DataSource == null) Tiles.DataSource = LoadedTextures; 

Просто снимите флажок и назначить его непосредственно, так как в первый раз вы добавляете один Texture, это изменит его не нуль, то после того, что он никогда не будет обновлять DataSource снова, независимо от того, сколько еще добавить:

Tiles.DataSource = LoadedTextures 

Если загрузка множественным Textures, это могло бы быть лучше, чтобы загрузить их все затем вызвать Tiles.DataSource = LoadedTextures один раз, а не каждый раз, когда вы загружаете новый Texture

+0

Хм, теперь у меня нет строк. – Svexo

+0

Хмм, используя для меня список привязок (использовал событие изменения, чтобы обновить список), Не могу ответить на мой собственный вопрос, хотя ^^ – Svexo

+0

@Svexo - Конечно, если вы нашли решение, вы можете добавить его в качестве ответа и принять его. – SwDevMan81

Смежные вопросы