2

我在 WPF 中使用 Datagrid 来显示从列表中的 LINQ-SQL 表达式返回的用户行:

private void admin_tab_GotFocus(object sender, RoutedEventArgs e)
{
    if (dbMethods.CheckDatabaseConnection())
    {
        using (PubsDataContext db = new PubsDataContext())
        {
            var Allusers = new List<Application_User>(from users in db.Application_Users
                                                      select users);
            users_DataGrid.DataContext = Allusers;
        }
    }
}

用户加载得很好,所有信息都完好无损。但是,当左键单击行时,该行不会被选中,并且似乎没有传递任何事件。我添加了一个 MouseDown 事件,只能捕获右键单击,但不能捕获左键单击。

数据网格的 XAML 是:

<DataGrid AutoGenerateColumns="True" Margin="6,6,6,215" Name="users_DataGrid" 
                              CanUserAddRows="True" ItemsSource="{Binding}" Height="286" Width="246"
                              MouseLeftButtonDown="users_DataGrid_MouseLeftButtonDown" MouseDown="users_DataGrid_MouseDown"/>

这是我在不同窗口(XAML 和 C#)上的单独数据网格的相同代码。这是用于比较的示例:

XAML

<DataGrid AutoGenerateColumns="True" Margin="1,136,1,207" Name="studentLearningExperiences_DataGrid" ItemsSource="{Binding}"
          HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" CanUserAddRows="True">
    <DataGrid.ContextMenu>
        <ContextMenu Name="studentLearningExperiences_ContextMenu">
            <!--HACK BUG - currently does not work with the button click <MenuItem Header="Save" Click="learningExperienceSave_BTN_Click" /> -->
            <MenuItem Header="Delete" Click="Delete_MenuItem_Click" />
        </ContextMenu>
    </DataGrid.ContextMenu>
</DataGrid>

C#

public void LoadStudentLearningExperiences()
{
    if (dbMethods.CheckDatabaseConnection())
    {
        using (PubsDataContext db = new PubsDataContext())
        {
            var completionList = new List<Learning_Experience>(from s in db.Learning_Experiences
                                                               where s.Student_ID == student.Student_ID
                                                               select s);
            studentLearningExperiences_DataGrid.DataContext = completionList;
        }
    }
}

任何人都可以找到我是否有错误、遗漏了什么或根据他们的经验提供建议吗?我引用了此链接无法编辑单元格,我想知道我的 SQL Server 表是否正在创建 TextBlocks 而不是 TexBoxes,但 SQL Server 中的表也看起来相同。

4

2 回答 2

2

我遇到了同样的问题,发现每次单击选项卡内的控件时,都会为该选项卡触发“SelectionChanged”事件。我检查了“SelectionChanged”处理程序背后的代码,以确保代码在每个选项卡条目中只执行一次。

于 2015-07-28T15:55:11.080 回答
0

周末休息一下,今天早上回来解决datagrid问题。我的应用程序基于用户可以在多个选项卡之间循环,因此我尝试将数据网格托管在单独的选项卡上并从 MainWIndow 构造函数填充数据上下文。这有效,所以我尝试从构造函数加载原始数据网格,它也有效。

原来问题出在标签的“Got Focus”属性上,它调用了填充数据网格的 LINQ。这是之前的代码:

<TabItem Header="Admin" Name="admin_tab" GotFocus="admin_tab_GotFocus" >
            <Grid>
                <Grid Name="grdAminTab" Margin="0,0,710,-1">        
                    <Button Content="Save" Height="23" Name="saveNewUser_BTN" Width="75" Click="saveUser_BTN_Click" HorizontalAlignment="Left" Margin="177,298,0,0" VerticalAlignment="Top" />
                    <Button Content="Delete" Height="23" HorizontalAlignment="Left" Margin="6,298,0,0" Name="deleteUser_BTN" VerticalAlignment="Top" Width="75" Click="deleteUser_BTN_Click" />
                    <DataGrid AutoGenerateColumns="True" Margin="6,6,6,215" Name="users_DataGrid" 
                              CanUserAddRows="True" ItemsSource="{Binding}" Height="286" Width="246" />
                </Grid>
            </Grid>
        </TabItem>

之后:

<TabItem Header="Faculty" IsEnabled="False" Name="faculty_tab" />
        <TabItem Header="Admin" Name="admin_tab" >
            <Grid>
                <Grid Name="grdAminTab" Margin="0,0,710,-1">        
                    <Button Content="Save" Height="23" Name="saveNewUser_BTN" Width="75" Click="saveUser_BTN_Click" HorizontalAlignment="Left" Margin="177,298,0,0" VerticalAlignment="Top" />
                    <Button Content="Delete" Height="23" HorizontalAlignment="Left" Margin="6,298,0,0" Name="deleteUser_BTN" VerticalAlignment="Top" Width="75" Click="deleteUser_BTN_Click" />
                    <DataGrid AutoGenerateColumns="True" Margin="6,6,6,215" Name="users_DataGrid" 
                              CanUserAddRows="True" ItemsSource="{Binding}" Height="286" Width="246" />
                </Grid>
            </Grid>
        </TabItem>

不确定在用户打开该选项卡之前是否有理由加载数据网格是一种不好的做法,但现在它已经解决了我的问题!任何有关此事件处理程序为何不起作用的见解将不胜感激。我遇到了 EventArgs 对鼠标事件不正确的类似问题,也许这是相似的?

于 2013-05-14T18:47:13.357 回答