小编lea*_*gcs的帖子

使用DataGridTemplateColumn在按键上开始编辑模式

我有一个绑定到名为MyObjects的ObservableCollection的DataGrid。DataGrid有2列:一列是DataGridTextColumn,另一列是DataGridTemplateColumn。

我想要实现的是在选择单元格时按下键时,模板列的行为类似于文本列。

例如,当您从文本列中选择一个单元格并单击“ A”键时,单元格编辑模板将激活,并且字母“ A”被输入到文本框中。

我想知道的是如何在模板列中实现此行为(即,按键激活其单元格编辑模板,并将字符作为输入传递给模板中的控件)。

我的搜索结果只能找到与在单元格之间切换时在编辑模板中获得焦点的控件有关的答案,这与我的问题不同。以下是我的DataGrid的XAML。

<DataGrid ItemsSource="{Binding MyObjects}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Test" Binding="{Binding Test}"/>
        <DataGridTemplateColumn Header="Date">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Date}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <!--This is the control that I want to focus!-->
                    <DatePicker SelectedDate="{Binding Date}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

编辑:

我编写了一个简单的帮助程序类,该类允许在单元格模板加载时集中XAML指定的控件……结合Aled的答案,这非常接近我想要的!我只需要弄清楚如何将输入传递给重点控件...

问题在于按键事件是在控件加载事件之前得到处理的,所以我需要弄清楚如何将它们桥接在一起……或完全采用新方法。

public sealed class FrameworkElementFocusHelper
{
    private static readonly DependencyProperty FocusOnLoadProperty =
        DependencyProperty.RegisterAttached("FocusOnLoad",
                                            typeof(bool),
                                            typeof(FrameworkElementFocusHelper),
                                            new UIPropertyMetadata(FocusOnLoadPropertyChanged));

    public static void FocusOnLoadPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        FrameworkElement element = (FrameworkElement)source;
        element.Loaded -= FrameworElementFocusHelperLoadedEvent;
        if ((bool)e.NewValue …
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid

6
推荐指数
1
解决办法
3472
查看次数

pymssql执行存储过程但不返回任何结果

我试图在SQL服务器上执行存储过程并使用python保存结果 - 我决定使用pymssql,因为它似乎是最简单的解决方案.

print pymssql.__version__

server = 'MY\SERVER'
user = 'user'
password = 'password'
database = 'db'
proc = 'checkin'

with pymssql.connect(server, user, password, database) as conn:
    with conn.cursor() as cursor:

        cursor.callproc(proc, (eha, ip, url, alias, location, rotation))
        conn.commit()

        f = open('/var/wwwdata/locations.txt', 'w')
        for row in cursor:
            print(row['Alias'])
            f.write(row['Alias'] + '\n')
        f.close()
Run Code Online (Sandbox Code Playgroud)

SQL Query执行一些插入/更新并以结尾

SELECT Alias FROM MyTable
Run Code Online (Sandbox Code Playgroud)

从SSMS运行SP可以正常工作,但是从Python运行SP会执行插入/更新功能,但不会返回任何结果.

根据pymssql文档,这是一个已知问题.但是,我找不到有效的解决方案.

我在网上找到了一些不同的建议,包括

  • 检查了我的pymssql版本(2.1.1)
  • 用.声明游标 dict=true
  • cursor.nextset()之后使用cursor.commit()
  • 使用cursor.fetchall()或获取结果cursor.fetchone(),两者都会导致类似的异常:

OperationalError:语句未执行或已执行语句没有结果集

有谁知道解决这个特殊问题?或者是否有一个更稳定的解决方案,用于python与SQL服务器的接口(特别是对于调用存储过程)?我想我也应该问,我是否完全错了?

还认为值得注意的是:操作系统是在Raspberry Pi 2 Model …

python sql-server pymssql sql-server-2012

6
推荐指数
1
解决办法
5513
查看次数

标签 统计

c# ×1

datagrid ×1

pymssql ×1

python ×1

sql-server ×1

sql-server-2012 ×1

wpf ×1