مجموعة أدوات C#WPF:كيف يمكنني جعل خلية من datagrid قابلة للتحرير؟

StackOverflow https://stackoverflow.com/questions/1230236

سؤال

لاحظ الكود الخاص ببرنامج WPF C# الصغير هذا والذي تم إنشاؤه باستخدام Microsoft Visual Studio 2008:

.xaml

<Window x:Class="WpfDatagridTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WpfToolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <WpfToolkit:DataGrid 
        x:Name="DataGrid_" ItemsSource="{Binding}"
        SelectionMode="Extended"
        CanUserAddRows="False" CanUserDeleteRows="False"
        CanUserResizeRows="False" CanUserSortColumns="False"
        AutoGenerateColumns="False"
        RowHeaderWidth="17" RowHeight="25" />
    </Grid>
</Window>

.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Windows.Controls;

namespace WpfDatagridTest
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            const int MAX = 10;

            for(int i = 0; i < MAX; ++i)
                DataGrid_.Columns.Add(new DataGridTextColumn()
                {
                    Header = i
                });
            DataGrid_.Items.Add("");
        }
    }
}

يعرض هذا البرنامج ببساطة شبكة بيانات لمجموعة أدوات WPF تحتوي على 10 أعمدة برؤوس وصف فارغ.

هناك مشكلة تحدث عند تحديد خلية معينة من الصف الفارغ ثم النقر عليها لتحريرها:تعطل البرنامج.يظهر مربع رسالة في Visual Studio يقول هذا:"لا يوجد رمز مصدر متاح للموقع الحالي." أود أن أعرف كيف يمكنني جعل خلية من مخطط البيانات قابلة للتحرير؟


هنا هو الاستثناء وتتبع المكدس:

System.InvalidOperationException لم يكن غير مسموح بالرسالة = "" EditItem "لهذا العرض".
المصدر = "إطار العرض التقديمي"
تتبع المكدس:في system.windows.controls.itemcollection.system.componentmodel.ieditableCollectionView.editim (عنصر كائن) في microsoft.windows.controls.datagrid.editrowitem (كائن Rowitem) في c: dd wpf_1 src wpf src controlspack wpftoolkit datagrid microsoft windows controls dataGrid.cs: السطر 3396 في microsoft.windows.controls.datagrid.OnexecutedBeginedit (eventedRoutedEventArg e) في c: dd wpf_1 src wpf Microsoft Windows Controls dataGrid.cs: السطر 2208 في microsoft.windows.controls.datagrid.onexecutionbeginedit (مرسل الكائن ، eventedRoutedEventArgs e) في c: dd wpf_1 src wpf src Windows Controls dataGrid.cs: السطر 2036 في system.windows.input.commandBinding.Onexecuted (Sender Object ، eventedRoutedEventArgs e) في system.windows.input.commandmanager.executeCommandbind (sender object ، .windows.input.commandmanager.findCommandBinding (CommandBindingCollection CommandBindings ، مرسل الكائن ، TroutedEventArgs E ، Icommand Command ، تنفيذ منطقي) في System.windows.input.CommandManager.findCommandbind (Sender Object ، Rouldeventargs E ، booman. windows.input.commandManager.Onexecuted (مرسل الكائن ، eventedRoutedEventArgs e) في system.windows.uielement.onexecutionthunk (مرسل كائن ، eventedRoutedEdeventArgs e) at system.windows.input.executionreoutedeventargs.invokeeventhandler .routedeventargs.invokehandler (معالج المندوبين ، هدف الكائن) في system.windows.RoutedEventHandlerInfo.invokeHandler (هدف الهدف ، RoutedEventArgs troutedeventargs) في System.Windows.EventRoute.InvokeHandlersImpl (المصدر الكائن ، Routedows. .Raiseeventimpl (مرسل DependencyObject ، TroutedEventArgs args) في system.windows.uielement.raiseevent (TroutedEventArgs args ، boolean trust) في system.windows.input.RoutedCommand.executeimpl (معلمة كائن ، iinputelement ، مستخدم boolean) .RoutedCommand.execute (معلمة الكائن ، هدف iinputelement) في microsoft.windows.controls.datagrid.beginedit (RoutedEventArgs editingeventargs) في c: dd wpf_1 src wpf src controlspack datagrid.cs: السطر 3059 في microsoft.windows.controls.datagridcell.onanymouseleftbuttondown (mousebuttoneventargs e) في c: dd wpf_1 src wpf src controlspack ell.cs : السطر 748 في microsoft.windows.controls.datagridcell.onanymouseleftbuttondownthunk (مرسل الكائن ، MouseButToneventArgs e) في c: dd wpf_1 src wpf src controlspack wpftoolkit CS: السطر 726 في system.windows.input.mousebuttoneventargs.invokeeventHandler (مندوب generichandler ، كائن generictarget) في system.windows.routedeventargs.invokehandler (devideventargs) System.Windows.EventRoute.InvokeHandlersImpl (مصدر الكائن ، ARDEDEVENTARGS ARGS ، boolean reraised) في system.windows.uielement.reraiseeventas (DependencyObjecte ، defensebuttone ، extenseTeNtOngeTnegent (defensebuttongent. OneventArgs e) في system.windows.uilement.onmousedownthunk (مرسل الكائن ، MousebutToneventArgs e) في system.windows.input.mouseButToneventArgs.invokeeventHandler (Depate Generichandler ، Object GenerIctarget) في System.Windows.RoutedEventArgs.invokehandler (Devableler). Windows.RoutedEventHandlerInfo.invokeHandler (الهدف الكائن ، TroutedEventArgs trowedeventargs) في system.windows.eventroute.invokehandlersimpl (مصدر الكائن ، rotedeventargs args ، booleanize) في system.uindows.uielement.aiseeeeventiMpl (contenerendergs. uielement.raiseevent (TroutedEventArgs args ، موثوق به من boolean) في system.windows.inputmanager.processStagingarea () في system.windows.inputmanager.processInput (inputeventargs) في system.windows.interop.hwndmouseInputProviderider.ReportInput (intptr hwnd ، وضع inputmode ، int32 timestamp ، إجراءات RawmouseActions ، int32 x ، int32 y ، int32 intptr ، WPARAM ، Intptr lParam ، Boolean & Wealled) في system.windows.interop.hwndsource.inputfiltermessage (intptr hwnd ، int32 msg ، intptr wparam ، intptr lparam ، boolean & handled) في ms.win32.hwndwrapper.wndproc (intptr hwnd ، WPARAM ، Intptr LPARAM ، BOOLEAN & GEALLE) في MS.WIN32.HWNDSUBCLASS.DISPATCHERCALLBACEOPERATION (مصدر الكائن ، رد الاتصال المفوض ، Args Object ، issingleparameter ، مندوب CatchHandler) في System.Windows.Threading.dispatcher.wrappedInvoke (رد الفوضى ، الكائن args ، boolean issingleparameter ، deligate catchhandler) في system.windows.threading.dispatcher.invokepl ( الأولوية المرسلة ، مهلة الفترة الزمنية ، طريقة المفوض ، ARGS الكائن ، issingleparameter المنطقي) في system.windows.throading.dispatcher.invoke (الأولوية dispatcherPriority ، طريقة المفوض ، الكائن ARG) Intptr wparam ، intptr lparam) في ms.win32.unsafenativemethods.dispatchMessage (msg & msg) في system.windows.throding.dispatcher.pushframeimpl (إطار الإرسال) في system.windows.therade.dispatcher.pushframe (dispatcherframe. .Threading.dispatcher.run () في system.windows.application.rundispatcher (كائن يتجاهل) في system.windows.application.runinternal (نافذة نافذة) في system.windows.application.run (نافذة نافذة) في system.windows.application .run () في wpfdatagridtest.app.main () في c: المستخدمون frank documents visual_studio_2008 projects wpfdatagridtest التجميع ، السلسلة [] args) في system.appdomain.executeassembly (سلسلة التجميع ، Agnction AssemblySecurity ، String [] args) في microsoft.visualstudio.hostingProcess.hostproc.RunUsersAsmbl System.Threading.ExecutionContext.run (ExecutionContext ExecutionContext ، ContextCallback Callback ، Object State) في System.Threading.ThreadHelper.ThreadStart () innerexception:

هل كانت مفيدة؟

المحلول

أنت تقوم بتعيين ItemsSource الخاص بك على ربط, ، ولكن لا يوجد DataContext لذا فإن هذا الربط عديم الفائدة.ثم تقوم بإنشاء الأعمدة الموجودة في الكود الخلفي وتعبئتها بالبيانات المؤقتة.من ما أفهمه حول DataGrid، لا يتم دعم التحرير إلا إذا كانت هناك بيانات مرتبطة بالشبكة.وإلا، ما هي البيانات التي تقوم بتحريرها؟

علاوة على ذلك، أعتقد أن هناك للقراءة فقط الخاصية (راجع وثائق DataGrid)، والتي يجب ضبطها على "خطأ" (لكنني أعتقد أنها خاطئة افتراضيًا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top