2011-12-10 83 views
16

例外が発生しています。DataGridViewコントロールの列の少なくとも1つにセルテンプレートがありません

System.InvalidOperationException was unhandled 
    Message=At least one of the DataGridView control's columns has no cell template. 
    Source=System.Windows.Forms 
    StackTrace: 
     at System.Windows.Forms.DataGridView.CompleteCellsCollection(DataGridViewRow dataGridViewRow) 
     at System.Windows.Forms.DataGridView.get_RowTemplateClone() 
     at System.Windows.Forms.DataGridView.RefreshRows(Boolean scrollIntoView) 
     at System.Windows.Forms.DataGridView.RefreshColumnsAndRows() 
     at System.Windows.Forms.DataGridView.OnBindingContextChanged(EventArgs e) 
     at System.Windows.Forms.Control.OnParentBindingContextChanged(EventArgs e) 
     at System.Windows.Forms.Control.OnBindingContextChanged(EventArgs e) 
     at System.Windows.Forms.Control.set_BindingContextInternal(BindingContext value) 
     at System.Windows.Forms.ContainerControl.set_BindingContext(BindingContext value) 
     at System.Windows.Forms.ContainerControl.get_BindingContext() 
     at System.Windows.Forms.Control.get_BindingContextInternal() 
     at System.Windows.Forms.Control.get_BindingContext() 
     at System.Windows.Forms.DataGridView.DataGridViewDataConnection.SetDataConnection(Object dataSource, String dataMember) 
     at System.Windows.Forms.DataGridView.set_DataSource(Object value) 
     at Bloowars_Tools.A1_ResultWnd.A1_ResultWnd_Shown(Object sender, EventArgs e) in D:\Documents\Visual Studio 2010\Projects\Bloowars Tools\Bloowars Tools\A1_ResultWnd.cs:line 72 
     at System.Windows.Forms.Form.OnShown(EventArgs e) 
     at System.Windows.Forms.Form.CallShownEvent() 
     at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme) 
     at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj) 
     at System.Threading.ExecutionContext.runTryCode(Object userData) 
     at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) 
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme) 
     at System.Windows.Forms.Control.InvokeMarshaledCallbacks() 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ScrollableControl.WndProc(Message& m) 
     at System.Windows.Forms.Form.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
     at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
     at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.RunDialog(Form form) 
     at System.Windows.Forms.Form.ShowDialog(IWin32Window owner) 
     at Bloowars_Tools.MainWnd.bt_A1_Wyniki_Click(Object sender, EventArgs e) in D:\Documents\Visual Studio 2010\Projects\Bloowars Tools\Bloowars Tools\Form1.cs:line 165 
     at System.Windows.Forms.Control.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
     at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
     at System.Windows.Forms.Button.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
     at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
     at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.Run(Form mainForm) 
     at Bloowars_Tools.Program.Main() in D:\Documents\Visual Studio 2010\Projects\Bloowars Tools\Bloowars Tools\Program.cs:line 18 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

これは私のコードです:

 public List<Player> PlayerList { get; set; } 

    public A1_ResultWnd() 
    { 
     InitializeComponent(); 
     //GenerateColumns();    
    } 

    private void GenerateColumns() 
    { 
     Grid.AutoGenerateColumns = false; 

     DataGridViewColumn miejsce = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "Miejsce"; 
     miejsce.HeaderText = "Miejsce"; 
     miejsce.Name = "miejsceCollumn"; 

     DataGridViewColumn imie = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "Imie"; 
     miejsce.HeaderText = "Imię"; 

     DataGridViewColumn uid = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "UID"; 
     miejsce.HeaderText = "UID"; 

     DataGridViewColumn rasa = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "Rasa"; 
     miejsce.HeaderText = "Rasa"; 

     DataGridViewColumn sex = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "Sex"; 
     miejsce.HeaderText = "Płeć"; 

     DataGridViewColumn klan = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "Klan"; 
     miejsce.HeaderText = "Klan"; 

     DataGridViewColumn strefa = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "Strefa"; 
     miejsce.HeaderText = "Strefa"; 

     DataGridViewColumn status = new DataGridViewColumn(); 
     miejsce.DataPropertyName = "Status"; 
     miejsce.HeaderText = "Status"; 

     Grid.Columns.Add(miejsce); 
     Grid.Columns.Add(imie); 
     Grid.Columns.Add(uid); 
     Grid.Columns.Add(rasa); 
     Grid.Columns.Add(sex); 
     Grid.Columns.Add(klan); 
     Grid.Columns.Add(strefa); 
     Grid.Columns.Add(status); 
    } 

    private void A1_ResultWnd_Shown(object sender, EventArgs e) 
    { 
     GenerateColumns(); 
     Grid.DataSource = PlayerList; //Here the exception occures 
    } 

PlayreListは空ではありません。

答えて

46

カラムのタイプを指定する必要があります。 textBox列が必要な場合は、new DataGridViewTextBoxColumn()を使用する必要があります。テキストボックスとコンボボックスが必要だとすると、次のようになります:

また、最初の列名を繰り返し呼び出すことになります。

指定された名前に対して次のように変更します。

DataGridViewColumn imie = new DataGridViewComboBoxColumn(); 
    imie.DataPropertyName = "Imie"; 
    imie.HeaderText = "Imię"; 
    imie.Name = "imieCollumn" 
5

DataGridViewの列がprogrammaticaly作成された場合は、DataGridViewののAutoGenerateColumnsプロパティは偽に設定する必要があります。

私のコードは、すべてのデータテーブルを表示することができたDataGridViewの例であり、それはこのフォームで完全に働いている:私はちょうど問題を解決するために、列のCellTemplateを設定するために必要な

 // Prepare the DataViewGrid 
     dataGridView1.Columns.Clear(); 

     // Add each column to the grid according to the data table structure 
     for (int i = 0; i < dataTable.Columns.Count; i++) 
     { 
      DataGridViewColumn dataGridViewColumn = new DataGridViewColumn(); 
      DataGridViewCell dataGridViewCell = new DataGridViewTextBoxCell(); 
      dataGridViewColumn.DataPropertyName = dataTable.Columns[i].ColumnName; 
      dataGridViewColumn.HeaderText = dataTable.Columns[i].ColumnName; 
      dataGridViewColumn.CellTemplate = dataGridViewCell; 
      dataGridViewColumn.Name = dataTable.Columns[i].ColumnName; 
      dataGridView1.Columns.Add(dataGridViewColumn); 
     } 

     // Set the DataSource for the binding 
     bindingSource1.DataSource = dataTable; 
     // Prevent unwanted columns autogeneration 
     dataGridView1.AutoGenerateColumns = false; 
     // Provide the binding to the DataGridView 
     dataGridView1.DataSource = bindingSource1; 
+1

は 'のDataGridViewのAutoGenerateColumnsプロパティはfalse.'ありがとうござい上で設定する必要があります!これは私の仕事をしている...何が奇妙なエラー – Luke

0

DataGridViewColumn c = new DataGridViewColumn(); 
c.Name = "ColumnName"; 
c.HeaderText = "DisplayText"; 
c.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
c.CellTemplate = new DataGridViewTextBoxCell(); 
dataGridView1.Columns.Add(c); 
関連する問題