-1

datagridviewがあり、dbから情報をロードします。ただし、実行時に、ユーザーがセル(デフォルトでは読み取り専用)を更新できるようにしたいのですが、これを行うことはできません。すべての変更がデータベースに保存されるため、これを行う必要がありますが、リロードするとそれ、いくつかの色のスタイルなどがなくなるので、リクエストに応じてdbからリロードし、読み取り専用の列のテキストを変更したいので、ガイドしてください。

ありがとう

4

1 に答える 1

2

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;
于 2012-06-14T20:24:24.327 に答える