当前位置: 首页 > 知识库问答 >
问题:

C#BindingSource可以包含字符串数组吗

范承望
2023-03-14
namespace WindowsFormsAppTest
{
  class Data
  {
    private string[] files;
    public string[] Files { get => files; set => files = value; }
  }
}

using System;
using System.Windows.Forms;

namespace WindowsFormsAppTest
{
partial class Form1
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false. 
    </param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }
    #region "business object"

    #endregion

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
        this.dataGridView = new System.Windows.Forms.DataGridView();
        this.bindingSource = new System.Windows.Forms.BindingSource(this.components);
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
        ((System.ComponentModel.ISupportInitialize)(this.bindingSource)).BeginInit();
        this.SuspendLayout();
        // 
        // dataGridView
        // 
        this.dataGridView.AutoGenerateColumns = false;
        this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.dataGridView.DataSource = this.bindingSource;
        this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
        this.dataGridView.Location = new System.Drawing.Point(0, 0);
        this.dataGridView.Name = "dataGridView";
        this.dataGridView.Size = new System.Drawing.Size(800, 450);
        this.dataGridView.TabIndex = 1;
        // 
        // bindingSource
        // 
        this.bindingSource.DataSource = typeof(WindowsFormsAppTest.Data);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(800, 450);
        this.Controls.Add(this.dataGridView);
        this.Name = "Form1";
        this.Text = "Form1";
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
        ((System.ComponentModel.ISupportInitialize)(this.bindingSource)).EndInit();
        this.ResumeLayout(false);

    }

    #endregion
    private DataGridView dataGridView;
    private BindingSource bindingSource;
}
}

共有1个答案

翟默
2023-03-14

若要绑定到数据网格视图,数据源必须是集合:

public class Data : List<EclipseFileInfo> { }

public class EclipseFileInfo
{
    private List<string> files;
    private string alias;

    public List<string> Files { get { return files; } set { files = value; } }
    public string Alias { get { return alias; } set { alias = value; } }
}

如果您希望在网格视图中将Files String[]显示为组合框,我们需要手动添加组合框,并手动设置其数据源。我们可以在表单构造函数中完成第一部分:

public Form2()
{
    InitializeComponent();

    dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete;
    DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn();

    dataGridView1.Columns.Add(comboboxColumn);

    Data data = new Data();
    data.Add(new EclipseFileInfo() { Alias = "Some Namespace 1", Files = new List<string> { "File1", "File2" } });
    data.Add(new EclipseFileInfo() { Alias = "Some Namespace 2", Files = new List<string> { "File3", "File4" } });
    data.Add(new EclipseFileInfo() { Alias = "Some Namespace 2", Files = new List<string> { "File5", "File6" } });

    dataGridView1.DataSource = data;
}

然后是DataBindingComplete事件处理程序中的第二部分:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        DataGridViewComboBoxCell cell = row.Cells[1] as DataGridViewComboBoxCell;
        cell.DataSource = (row.DataBoundItem as EclipseFileInfo).Files;
    }
}
 类似资料:
  • 在程序设计中,为了方便处理,通常把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据结构。一个数组可以分解成多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按照数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 本文主要介绍一维数组、二维数组和字符数组,其余的数组将会在以后的文章中介绍到。

  • 问题内容: base64编码的字符串是否可能包含空格?具体来说,它可以在字符串 末尾 包含空格吗? PS。我正在考虑整个“ MySQL在将字符串存储在VARCHAR字段中时会修剪尾随空白” ;-) 问题答案: 不,它不能。见Base64编码通过使用允许的字符库,这是人物,,,和(最后两个可能因实施不同),以及填充字符(不过这也取决于实现一些实现不使用填充在所有)。

  • 问题内容: 我在MySQL表中有一个表,其字段名称为“ product”,并想将其重命名为“ ds-product”。 我正在使用的CMS类型系统使用formfields的id作为要插入的表字段的名称。 在大多数情况下,它可以正常工作,但是对于特定的字段,它会在我提供的ID之前加上“ ds-”,因此必须使表字段名称匹配。 但是,当尝试执行查询时,出现以下错误 “字段列表”中的未知列“ sales.

  • 问题内容: 我需要编写一个比较字符串的Java Comparator类,但是要稍作改动。如果要比较的两个字符串在字符串的开头和结尾相同,并且中间不同的部分是整数,则根据这些整数的数值进行比较。例如,我希望以下字符串按显示顺序结束: aaa bbb 3 ccc bbb 12 ccc ccc 11 ddd eee 3 ddd jpeg2000 eee eee 12 ddd jpeg2000 eee 如

  • 我能够通过使用下面这个问题的注释提供的代码来解决这个问题。所有其他帖子都是有效的! 我使用的有用的东西来自第一个评论。虽然提供的所有示例代码似乎也是有效的!

  • 问题内容: 我有一个字节数组,其中包含我希望转换为字符串的ASCII字符。例如: myByteArray在循环后应包含字符串“ 12345678”。如何将此字符串转换为String变量? 谢谢! 问题答案: 用 字符串类为此提供了一个构造函数。 旁注:此处的第二个参数是CharSet(字节编码),应谨慎处理。这里更多。