datagridviewがあり、dbから情報をロードします。ただし、実行時に、ユーザーがセル(デフォルトでは読み取り専用)を更新できるようにしたいのですが、これを行うことはできません。すべての変更がデータベースに保存されるため、これを行う必要がありますが、リロードするとそれ、いくつかの色のスタイルなどがなくなるので、リクエストに応じてdbからリロードし、読み取り専用の列のテキストを変更したいので、ガイドしてください。
ありがとう
Question
これはユーザーの実際 です
datagridviewに列があり、デフォルトでは(I dont set it readonly anywhere in code
)読み取り専用です。それはから来ていますdataset which gets data from a stored procedure
、この特定のフィールドは計算されたものです、so there is no column in the table for it
。私が操作できるテーブルにある他のすべてのフィールド、except for this one
。(datagridviewでの表示のみを目的として)実行時にこの列の値を変更する必要があります。これにより、読み取り専用エラーが発生します。
これはAnswer
、ユーザーの問題を解決したものです。
データセット(読み取り専用と表示されている列)からデータを読み取った後、これを実行してみてください-ds.Tables[0].Columns["Your New Column"].ReadOnly = false;
Read the comments below for more clarity please.
ユーザーの実際の質問は私が上に書いた以下のコメントにあるので、以下の答えとコードを無視してください。ユーザーは自分の質問を変更する必要があります。その完全に間違って誤解を招く
Winformsプロジェクトを追加し、DataGridViewとボタンをドロップします。ボタンにクリックハンドラーを追加します。
DataGridViewに列を追加DataProperty
し、Designerで列の名前を「Name」とします。としてマークしRead-Only
ます。列DataPropertyNameは、データベースのフィールドと一致する必要があります。I have a class called Books with a Property called Name
。したがってName
、この場合は呼び出す必要があります。
以下のコードをコピーして貼り付け、F5キーを押します。
Click the Button to update the read-only column value.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
List<Book> books = new List<Book>();
books.Add(new Book() { Name = "C#" });
InitializeComponent();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = books;
dataGridView1.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{
dataGridView1[0,0].Value = "Winforms";
}
}
public class Book
{
public string Name { get; set; }
}
}
参照用のDataGridViewDesignerコード:-
//
// dataGridView1
//
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1});
this.dataGridView1.Location = new System.Drawing.Point(42, 91);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(270, 157);
this.dataGridView1.TabIndex = 1;
//
// Column1
//
this.Column1.DataPropertyName = "Name";
this.Column1.HeaderText = "Name";
this.Column1.Name = "Column1";
this.Column1.ReadOnly = true;