我在DataGridView winforms控件中有一个名为"Quote Price"的列.我可以正确对齐一个没有空格的列,例如"Unit"howerver我无法将列标题与名为"Quote Price"的列名称对齐.我试图使用TopRight,MiddleRight和bottomRight但没有成功.
SelectedAdditionalCost.Columns["Quote Price"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; // Doesn't want to right align
SelectedAdditionalCost.Columns["Quote Price"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; // column contents No worries, right aligns.
Run Code Online (Sandbox Code Playgroud)
我确信我正在做一些非常愚蠢的事情,但是,我无法做到这一点.
我有WPF和Windows Forms的经验,但是只使用了Windows Forms DataGridView而不是WPF DataGrid(它只包含在.Net 4中,或者可以从Codeplex添加到.Net 3.5中,我理解).我即将使用其中一个控件来大量创建大量数据,并且读取性能是WPF DataGrid的一个问题所以我可能会坚持使用Windows窗体DataGridView.这是这样的吗?
我不想使用第三方控件.
对于大量数据,Windows窗体DataGridView是否为WPF DataGrid提供了显着的性能?
如果我使用WPF,我宁愿使用.Net 3.5S SP1,除非.Net 4中的DataGrid明显更好?
此外,我想使用ADO与DataTable,我认为它更适合Windows窗体..
在更新其列时,如何暂停.NET DataGridView显示任何内容?
这是我目前的代码.它工作正常,但在foreach循环中它很慢; 你可以看到horiz滚动条在添加每列时缓慢增长.我自己构建UI列,因为我不想出于各种原因使用dataGridView1.AutoGenerateColumns.
// Disconnect and reset DataGridView
dataGridView1.DataSource = null;
dataGridView1.SuspendLayout();
dataGridView1.Columns.Clear();
// Get data from SQL
DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter("select * from employeehist", conn);
adapter.Fill(dt);
// Build DataGridView columns
foreach (DataColumn c in dt.Columns)
{
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.SortMode = DataGridViewColumnSortMode.NotSortable;
col.DataPropertyName = c.ColumnName;
col.HeaderText = c.Caption;
dataGridView1.Columns.Add(col);
}
// Reconnect DataGridView
dataGridView1.DataSource = dt;
dataGridView1.ResumeLayout(true);
Run Code Online (Sandbox Code Playgroud) 我正在将DataTable绑定到GridView.它不会调整DataTable的高度和宽度.如果行数很少,我怎么能拉伸我显示所有列的网格宽度和高度收缩.

我有一个绑定到数据库表的DataGridView.DataGridView不可编辑,有一些文本字段可以编辑数据,这些字段由按钮控制.我有一个NewRow按钮,代码如下:
dataGridView1.AllowUserToAddRows = true;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Selected)
{ row.Selected = false; }
}
dataGridView1.Rows[dataGridView1.NewRowIndex].Selected = true;
Run Code Online (Sandbox Code Playgroud)
我需要的是:
我试过了:
bindSourceGS.Position = dataGridView1.NewRowIndex;
Run Code Online (Sandbox Code Playgroud)
但是这并没有选择datagridview的newRow.我想使用datagridview的newRow,因为当用户按下取消按钮时,我不必删除数据集中的行,而datagridview.Rows [i]有一个IsNewRow属性.
我有一个现有的应用程序,需要在DataGridView单元格中显示一个图像,以表示该记录是否具有与之关联的特定标志(不是用户可编辑的,这来自数据库).
如果有一个标志,我会显示相应的图像,如果没有标记,我希望列中没有显示任何内容.
DataGridView列不是在Visual Studio设计器中创建的,否则这很容易.我可以在列上设置NullValue属性.相反,当所有数据都加载到DataTable中时,在运行时创建列,然后从该DataTable创建DataView,然后将DataGridView的Datasource设置为DataView.
我不能完全重写这个,否则我只是在VS Designer中定义列,而不是仅仅从DataTable中定义列的荒谬方式.
那么我的问题是,当基础数据表为空时,如何使图像的列显示为什么?
这里有一些伪C#来证明我的意思.记住,我没有写它来使用这样的两个DataTables; 当我把它递给我时,就是那种方式,我不想仅仅为了添加一个新列而做出重大改变......
DataTable rawData = someMethodThatReturnsMyRawData();
DataTable data = new DataTable();
data.Columns.Add("Flags", typeof(Image));
data.Columns.Add("SomeOtherColumn");
foreach (DataRow rawDataRow in rawData.Rows)
{
DataRow dataRow = data.NewRow();
bool hasFlagType1 = false;
bool hasFlagType2 = false;
if (rawDataRow["FlagType1ID"] != DBNull.Value)
{
hasFlagType1 = true;
}
if (rawDataRow["FlagType2ID"] != DBNull.Value)
{
hasFlagType2 = true;
}
if (hasFlagType1 && hasFlagType2)
{
dataRow[0] = Properties.Resources.BothFlagsImage;
}
else if (hasFlagType1)
{
dataRow[0] = Properties.Resources.FlagType1Image;
}
else if (hasFlagType2)
{
dataRow[0] = …Run Code Online (Sandbox Code Playgroud) 我有以下方法在DataGridView上加载产品
private void LoadProducts(List<Product> products)
{
Source.DataSource = products; // Source is BindingSource
ProductsDataGrid.DataSource = Source;
}
Run Code Online (Sandbox Code Playgroud)
现在我试图让我回来保存它们如下图所示.
private void SaveAll()
{
Repository repository = Repository.Instance;
List<object> products = (List<object>)Source.DataSource;
Console.WriteLine("Este es el número {0}", products.Count);
repository.SaveAll<Product>(products);
notificacionLbl.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了InvalidCastException这条线:
List<object> products = (List<object>)Source.DataSource;
Run Code Online (Sandbox Code Playgroud)
那么如何将DataSource转换为List呢?
我的问题是:当我将数据源绑定到DataGridView时
BindingList<Contract> contracts = new BindingList<Contract>(Contract.GetAll());
dgEndingContracts.DataSource = contracts.Where(c => c.ExpirationDate <= nextMonth && c.IsArchived == false).ToList();
Run Code Online (Sandbox Code Playgroud)
并设置每列,SortMode = DataGridViewColumnSortMode.Automatic
当我点击dataGridView标题行不排序.
但是当我手动创建每一列时,每行dataGridView创建并填充数据,并将set column sort模式设置为自动,排序工作正常.
有什么区别,如何在第一种方法中启用排序?
我有一个DataGridView从SQL服务器数据库加载数据.当我加载数据时需要很长时间.
我想向用户提供数据正在加载的信息.请问您Progressbar在将数据加载到数据库时连接的最佳方式是DataGridView什么?
我不希望任何人为我制作完整的代码.我只是想知道如何做到这一点.
我看到有人以赏金授予我的问题.我想说,目前我使用这个代码,如果它适合的话我会恭喜.
DTGdataTable = new DataTable();
SqlDataAdapter SDA = new SqlDataAdapter
SDA.Fill(DTGdataTable);
dataGridView1.DataSource = DTGdataTable ;
Run Code Online (Sandbox Code Playgroud)
谢谢大家的时间.
我正在尝试将数据连接添加到使用SQLite的datagridview.我已经添加了对SQLite的引用(下载了所需的文件)但是当我通过向导添加数据源时,SQLite不包含在选项中 - 请参见下面的截图:
我环顾四周寻找这个问题的答案,但没有成功找到任何问题.
以下是项目文件夹中数据库的屏幕截图:
有没有办法将datagridview绑定到sqlite数据源?
任何帮助,将不胜感激.
谢谢!
datagridview ×10
c# ×7
winforms ×7
.net ×6
ado.net ×1
casting ×1
datagrid ×1
datasource ×1
image ×1
sql ×1
sql-server ×1
sqlite ×1
wpf ×1
wpfdatagrid ×1