DataGridView仅1显示1行
本文关键字:1行 显示 DataGridView | 更新日期: 2023-09-27 18:27:52
我有一个带有数据源的DatagridView,但我的DatagridView只画了一行。
我的代码是这样的:
名单申报
List<Texture> LoadedTextures = new List<Texture>();
客户数据源对象
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;
}
在调试时,我还注意到我的数据源包含加载的元素,但datagridview只绘制1行。
p.S:我试过,DataGridView.Refresh(),DataGridView.RefreshEdit(),每次更改时都分配数据源,但这些都没有帮助。
使用绑定列表对我有效(使用更改事件刷新列表),所有响应的Tnx。
假设这是一个网络应用程序,我尝试了以下方法来证实我的一个怀疑:
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"
}
这个列表丢失了所有的项目,我猜这就是发生在你身上的事情。至于如何解决,我不确定,但至少它缩小了你问题的根源。
如果它不是一个网络应用程序,那么我很抱歉,因为我不熟悉其他类型应用程序的使用寿命。
我认为您检查DataSource是否为null可能是问题所在:
if(Tiles.DataSource == null) Tiles.DataSource = LoadedTextures;
只需移除检查并直接分配它,因为第一次添加一个Texture
时,它会将其更改为非null,然后再也不会更新DataSource,无论您添加多少:
Tiles.DataSource = LoadedTextures
如果您加载多个Textures
,最好将它们全部加载,然后调用Tiles.DataSource = LoadedTextures
一次,而不是每次加载新的Texture