DataGridView только 1 показать 1 строку - PullRequest
1 голос
/ 14 марта 2012

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

Мой код выглядит примерно так:

Объявление списка

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

Объект источника данных Custum

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;  
}

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

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

Ответы [ 3 ]

1 голос
/ 15 марта 2012

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

0 голосов
/ 14 марта 2012

Я думаю, что ваша проверка на наличие нулевого источника данных, вероятно, проблема:

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

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

Tiles.DataSource = LoadedTextures

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

0 голосов
/ 14 марта 2012

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

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"
    }

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

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

...