C# WPF 툴킷 : 데이터 그라이드의 셀을 편집 가능한 방법은 무엇입니까?

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

문제

Microsoft Visual Studio 2008로 만든이 작은 WPF C# 프로그램의 코드를 기록하십시오.

.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("");
        }
    }
}

이 프로그램은 단순히 헤더가있는 10 개의 열과 빈 행이있는 WPF 툴킷 데이터 그라이드를 보여줍니다.

빈 행의 특정 셀을 선택한 다음 클릭하여 편집 할 때 발생하는 문제가 있습니다 : 프로그램이 충돌합니다. "현재 위치에 사용할 수있는 소스 코드는 없습니다." Datagrid의 셀을 편집 가능한 방법을 알고 싶습니다.


예외와 스택 트레이스는 다음과 같습니다.

System.inValidOperationException은 처리되지 않은 메시지 = " ''edititem '은이 견해에 허용되지 않습니다."
소스 = "프레젠테이션 프레임 워크"
stacktrace : at system.windows.controls.itemcollection.system.componentmodel.ieditablecollectionview.editem (객체 항목)의 microsoft.windows.controls.datagrid.editrowitem (object rowitem)의 c : dd wpf_1 src src src src ControlSpack wpftoolkit datagrid microsoft wind Datagrid Microsoft Windows Controls Datagrid.cs : Microsoft.windows.controls.datagrid.onexecutedBeginedit (객체 발신자, ExecutedRoutedEventArgs e)에서 2208 행 microsoft wind system.windows.input.commandmanager.findcommandbinding (commandbindin GCOLLECTION COMMANDBINDINGS, 객체 발신자, ROUNEDEVENTARGS E, ICOMMAND 명령, 부울 실행) SYSTEM.WINDOWS.INPUT.COMMANDMANAGER.FINDCOMMANDBINDING (객체 발신자, ROUNEDEVENTARG E, ICOMMAND COMMANT, BOOLEAN EXECUTE)에서 SYSTEM.INPONT.COMMANDMANAGER.ONEXECUTED (Object.CommandManager. system.windows.uielement.uielement.uielement.uelement.onexecutedThunk (객체 발신자, executedRoutedEventArgs e)에서 executedRoutedEventArgs e) execureDeDeventArgs e) system.windows.input.input.input.executedroutedeventargs.invokeeventhandler (generichandler, Object Target)에서 System.routedeventargs.routedeventargs.routedeventargs.routedeventargs.nvokeEventhandler. system.windows.routedeventhandlerinfo.invokehandler (객체 대상, RoutedeventArgs at System.windows.eventroute.invokeHandlersimpl (Object Source, boolean reraized)의 target) at system.windows.uielement.raiseevent (Routedeventargs args, boolean trusted)에서 system.windows.input.routedcomma nd.executeimpl (객체 매개 변수, iinputelement target, boolean userinitiated)에서 system.windows.input.routedcommand.execute (microsoft.windows.controls.beginedits editeditingeventargs)의 객체 매개 변수, iinputelement target)에서 c : wpf_1 src wpf src controlspack wpftoolkit datagrid microsoft windows controls datagrid.cs : microsoft.windows.controls.datagridcell.onanymouseleftbuttondown (Micsureftbuttondown)의 Mousebutt on in in in oldventArgs e) wpf src controlspack wpftoolkit datagrid microsoft wind src controlspack wpftoolkit datagrid microsoft wind 객체 대상)에서 system.windows.routed eventHandlerInfo.invokeHandler (객체 대상, RoutedEventArgs rounedEventArgs)에서 system.windows.eventroute.invokeHandlersimpl (객체 소스, RoutedEventArgs args, boolean reraized)에서 windows.uielement.reraiseeverventas (ateraiseeverventas, argedeventorgs, argedevent). .uielement.crackmousebuttoneventandreraiseevent (system.windows.windows.onmousedownthunk (Object Sender, MouseButtoneventargs e)의 System.Windows.input.Input.MouseButtOntArg, inferictArgetwendwendwendler (velegateButtonventArg) system.windows.routedeventhandlerinfo.invokehandler (객체 target, routedeventargs rounedeventargs)에서 system.windows.eventroute.invokehandlersimpl (객체 소스, RoutedeventArgs, boolean reraized)의 invokeHandler (delegate handler, object target). system.windows.ui의 종속성 변호기, RoutedeventArgs args) element.raiseevent (RoutedeventArgs Args, 부울 신뢰) system.windows.input.inputmanager.processstagingArea ()에서 system.windows.input.inputmanager.processinput (inputeventargs input)의 system.windows.inputprovidersite.repportinpres (inputepportepport). system.windows.interop.hwndmouseInputprovider.filtermessage (intptr hwnd, int32 msgt, int32 휠)에서 system.windows.interop.hwndmouseinputprovider.reportInput (intptr hwnd, inputmode mode, int32 timestamp, rawmouseactions actions, int32 x, int32 y, int32 휠) system.windows.interop.hwndsource.inputfiltermessage (intptr hwnd, int32 msg, intptr wparam, intptr lparam, boolean & handled)에서 wparam, intptr lparam, boolean & bonment) ms.win32.hwndwrapper.wndproc (intptr hwnd, intptr hwnd, intptr hwnd, intptr hwnd) ms.win32.hwndsubclass.dispatchercallbackoperation (객체 o)에서 wparam, intptr lparam, boolean & brongled) system.windows.windows.threading.exceptionwrapper.internalealcall (System.windows.T의 객체 args, boolean issingleparameter)에서 ms.win32.hwndsubclass.dispatchercallbackoperation (object o). hreading.exceptionwrapper.rycatch when (객체 소스, 대표 콜백, 객체 args, 부울 issingleparameter, delegate catchhandler)에서 system.windows.windows.threading.dispatcher.wrappedInvoke (대상, 부울 IssingleParameter, Delegate Catchhandler)의 객체 Args.wathled. .dispatcher.invokeimpl (DispatcherPriority 우선 순위, 타임 스파 타임 아웃, 대표 방법, 객체 Args, 부울 issingleparameter)에서 system.windows.threading.dispatcher.invoke (DispatcherPriority Priority, delegate methys, object arg)의 ms.win32.hwndsubclass. ms.win32.unsafeNativeMethods.dispatchMessage (msg & msg)의 system.windows.windows.threading.dispatcher.pushframeimpl (Dispatcherframe)의 Systation.Winding.DisPatcher.dispatcher.dispatcher.dispatcher.dispatcher.dispatcher.dispatcher.dispatcher.dispatcher. )에서 system.windows.dispatcher.run ()의 system.windows.pplication.rundispatcher (객체 무시)에서 system.windows.application.runinnal (창) .Windows.application.run (Window Window)에서 system.windows.windows.run ()의 wpfdatagridtest.app.app.main ()의 c : user frank documents vower_studio_2008 projects wpfdatagridtest wpfdatagridtest debug debug debug debug debug debug app.g.cs : system.appdomain._nexecuteassembly (어셈블리 어셈블리, 문자열 [] args)에서 system.appdomain.executeaseMbly (string assemblyfile, 증거 어셈블리 보안, 문자열 [] args)에서 microsoft.visualstudio.hostingprocess.hostproc. system.threading.executionContext.run (executionContext executionContext, ContextCallback Callback, Object)에서 system.threadhelper.threadstart () innerexception : threading.executioncontext.run의 systrestart_context (객체 상태)에서 runusersAssembly ()에서 runUserSasembly () threadStart_context (객체 상태) : innerexception :

도움이 되었습니까?

해결책

당신은 당신의 항목 소스를 설정하고 있습니다 제본, 그러나 데이터 콘텍스트가 없으므로이 바인딩은 쓸모가 없습니다. 그런 다음 코드 베어드에서 열을 생성하고 임시 데이터로 작성합니다. Datagrid에 대해 이해하는 것에서 편집은 그리드에 바인딩 된 데이터가있는 경우에만 지원됩니다. 그렇지 않으면 어떤 데이터를 편집하고 있습니까?

더욱이, 나는 a가 있다고 믿는다 IsReadonly 속성 (DataGrid 문서를 확인)은 False로 설정해야합니다 (그러나 기본적으로 False라고 생각합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top