gpt4 book ai didi

C# WPF 在不知道列的情况下将数据网格列大小设置为自动

转载 作者:行者123 更新时间:2023-11-29 01:56:36 26 4
gpt4 key购买 nike

我创建了一个函数来填充 MySQL 数据库中的数据表,然后使用该函数设置按预期工作的 DataGrid 的源。我的问题是这个特定的表只有两个字段,因此留下了很多空间,我的研究表明我必须将各个列宽设置为“*”,意思是自动,但是因为数据网格只在编译时填充我不能访问这些列,或者我可以吗?

我正在努力寻找一种方法来编辑这些列,因为它们直到编译时才出现,例如,我还想更改这些列的“标题”。

这是我的代码;

从查询中填充数据表的函数

    // Function to load Query Data into a Data Table
public DataTable LoadIntoDataTable(string SQLQuery)
{
// Create a Data Table
DataTable dataTable = new DataTable();

// Check Connection
if (this.OpenConnection() == true)
{
try
{
// Initialise my data adapter with a query
MySqlDataAdapter dataSource = new MySqlDataAdapter(SQLQuery, Connection);

// Fill the Data Table based on the query
dataSource.Fill(dataTable);

// Close Connection
this.CloseConnection();

// Return Data
return dataTable;
}
catch (MySqlException ex)
{
switch (ex.Number)
{
default:
{
MessageBox.Show("Error: " + ex.Number, "Error");
break;
}
}
}
}

return dataTable;
}

用信息填充数据网格的函数

    public void FillDataGrid()
{
// Create a Data Table and fill it with Information from Title Table
DataTable MyData = myDatabase.LoadIntoDataTable("SELECT * FROM titles");

// Assign Data Table to the Data Grids Source
dg_TitlesView.ItemsSource = MyData.DefaultView;

// Count Table Rows and Change Relevant Label to Reflect this number
lbl_TitleCount.Content = myDatabase.CountTableRecords("titles");
}

谢谢。

最佳答案

你需要 Hook AutoGeneratedColumns事件,一旦创建了所有自动生成的列,就会触发该事件:

    dgUsers.AutoGeneratedColumns += dgUsers_AutoGeneratedColumns;

然后在那里进行修改:

    void dgUsers_AutoGeneratedColumns(object sender, EventArgs e)
{
foreach (var oColumn in dgUsers.Columns)
{
// This is how to set the width to *
oColumn.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star);

// The header will contain the column name, so you can change it as needed
switch (oColumn.Header.ToString().ToLowerInvariant())
{
case "id":
oColumn.Header = "Identifier";
break;

// etc.
}
}
}

更新

要在单元格上设置对齐方式,您需要在应用程序的某处添加样式(即托管网格的窗口):

<Window.Resources>
<Style x:Key="CellRightAlign">
<Setter Property="Control.HorizontalAlignment"
Value="Right" />
</Style>
</Window.Resources>

然后设置单元格样式来使用这个:

            switch (oColumn.Header.ToString().ToLowerInvariant())
{
case "id":
oColumn.CellStyle = (Style)Resources["CellRightAlign"];
oColumn.Header = "Identifier";
break;

关于C# WPF 在不知道列的情况下将数据网格列大小设置为自动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27237238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com