我有一个带小型数据库的数据网格(sql compact) 表包含超过500行,每个块包含不同的节号;
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>
The Code behinde:
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行:组编号,组名,学科(或总生物学:生物学专栏中行的结果总和) 对于所选组编号中的每个部分编号: 下一行:(截面率或截面结果,数学或物理)==&gt;基于选中的复选框
例如:
第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());
}
但它不起作用。
我不知道如何处理这个问题? 谢谢你的帮助。
答案 0 :(得分:1)
如果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.
}
}
为了改善使用体验,您还可以考虑设置一些限制,以便用户只能选择组/块而不是部分。如果这适合你的需要。
答案 1 :(得分:0)
感谢RonakThakkar,我投了他的有用答案。
由于Grid SelectionUnit设置为“FullRow”所以回答我问题的第一部分是:
private void button1_Click(object sender, RoutedEventArgs e)
{
if (((DataRowView)dataGrid1.SelectedItem).Row.ItemArray[0].ToString() != string.Empty)
{
textBox1.Text=((DataRowView)dataGrid1.SelectedItem).Row.ItemArray[0].ToString()+","+((DataRowView)dataGrid1.SelectedItem).Row.ItemArray[1].ToString()+","+((DataRowView)dataGrid1.SelectedItem).Row.ItemArray[7].ToString();
}
}
,文本框中的结果为:1,GPA,100
所以剩下的部分是我如何遍历行直到分隔每个块的空行?
更多解释:例如,如果用户选择了第一行,并且选中了sectionresultcheckbox和mathcheckbox,并且单击了该按钮,我们应该在文本框中:
1,GPA,100
+下一行+ 80 , 80, 90 ,70 ,54 ,31
谢谢你的帮助。