gpt4 book ai didi

c# - 在 wpf 或 winform 中使用数据网格(或数据 GridView )时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:29 25 4
gpt4 key购买 nike

我有一个带有小型数据库的数据网格(sql compact)表格包含超过 500 行,每个 block 包含不同的部分编号;

Xamle 代码:

  <Window x:Class="WpfApplication9.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="440" Width="690" Loaded="Window_Loaded">
<Grid>
<Button Content="To TextBox" Height="29" HorizontalAlignment="Left" Margin="561,272,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<DataGrid AutoGenerateColumns="True" Height="234" HorizontalAlignment="Left" Margin="12,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="644" />
<CheckBox Content="Section Rate" Height="16" HorizontalAlignment="Left" Margin="126,313,0,0" Name="checkBox1" VerticalAlignment="Top" />
<CheckBox Content="Section Result" Height="16" HorizontalAlignment="Left" Margin="28,313,0,0" Name="checkBox2" VerticalAlignment="Top" />
<CheckBox Content="Discipline" Height="16" HorizontalAlignment="Left" Margin="28,272,0,0" Name="checkBox3" VerticalAlignment="Top" />
<TextBox Height="54" HorizontalAlignment="Left" Margin="240,324,0,0" Name="textBox1" VerticalAlignment="Top" Width="396" />
<CheckBox Content="Total Biology" Height="16" HorizontalAlignment="Left" Margin="113,272,0,0" Name="checkBox4" VerticalAlignment="Top" />
<CheckBox Content="Math" Height="16" HorizontalAlignment="Left" Margin="28,351,0,0" Name="checkBox5" VerticalAlignment="Top" />
<CheckBox Content="Physics" Height="16" HorizontalAlignment="Left" Margin="113,351,0,0" Name="checkBox6" VerticalAlignment="Top" />
</Grid>

背后的代码:

private void button1_Click(object sender, RoutedEventArgs e)
{
DataRowView _data = dataGrid1.CurrentCell.Item as DataRowView;
if (_data != null)
{
MessageBox.Show(_data.Row[0].ToString());
}
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\MyDatabase1.sdf");
con.Open();
SqlCeDataAdapter da = new SqlCeDataAdapter("select * from StudentGroup", con);
DataTable dt = new DataTable();
DataSet ds = new DataSet();
da.Fill(dt);
dataGrid1.ItemsSource = dt.DefaultView;
//dataGrid1.ItemsSource = ds.Tables[0].DefaultView;
con.Close();
}

我想根据选中的复选框将数据导出到 textbox1,格式如下:第 1 行:Group Number、GroupName、Discipline(或 Total Biology:Biology 列中行的结果总和)对于所选组号中的每个部分号:下一行:(部分率或部分结果,数学或物理)==>基于选中的复选框

例如:

第 1 行:1,GPA,100(或 137= 总生物学)如果 SectionResultcheckbox 和 mathchechbox 都被选中:下一行将是:80、80、90、70、54、31

我已经试过了:

    DataRowView _data = dataGrid1.CurrentCell.Item as DataRowView;
if (_data != null)
{
MessageBox.Show(_data.Row[0].ToString());
}

但它不起作用。

我不知道如何处理这个问题?感谢您的帮助。

最佳答案

如果 Grid SelectionUnit 设置为“FullRow”,则使用以下代码。

((DataRowView)dgGroup.SelectedItem).Row -> This will give you current data row

((DataRowView)dgGroup.SelectedItem).Row.ItemArray[0] -> This will give first column value

((DataRowView)dgGroup.SelectedItem).Row.ItemArray[1] -> This will give second column value

如果 Grid SelectionUnit 设置为“Cell”,则使用以下代码。

(DataRowView)dgGroup.SelectedCells[0].Item -> This will give you current data row

((DataRowView)dgGroup.SelectedCells[0].Item).Row.ItemArray[0] -> This will give first column value

根据您的评论添加更多代码以遍历各个部分。

            // Find index of selected row which would be group/block row. Add 1 to find first section row in that block/group.
var index = dgGroup.Items.IndexOf(dgGroup.SelectedItem) + 1;

// Starting from the index found above loop through section rows untill you find blank row which can be identified by checking if "Group Name" does not have any value.
for (int i = index; i < dgGroup.Items.Count; i++)
{
if (((DataRowView)dgGroup.Items[i]).Row.ItemArray[1].ToString().Trim() == string.Empty)
{
return;
}
else
{
// Add data to textbox.
}
}

为了改善使用体验,您还可以考虑设置一些限制,以便用户只能选择组/ block ,而不能选择部分。如果这适合您的需要。

关于c# - 在 wpf 或 winform 中使用数据网格(或数据 GridView )时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18529267/

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