【问题标题】:Setting the typeof value from combobox Items in C#从 C# 中的组合框项中设置 typeof 值
【发布时间】:2017-01-09 14:42:06
【问题描述】:

我是 C# 新手,我正在通过编码不连接到外部数据库来制作一个简单的表。我有一个组合框(下拉列表),以便用户可以从下拉列表项中选择列的数据类型,然后将所选项目设置为列的数据类型。我需要这一行中的选定项目:

            customer.Columns.Add(cn , typeof(long));

这是我的全班:

 namespace HomeWork1
 {
 public partial class Form1 : Form
 {
    public String tn;
    public String cn;
    DataTable customer;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        comboBox1.Items.Add("Boolean");
        comboBox1.Items.Add("Byte");
        comboBox1.Items.Add("Char");
        comboBox1.Items.Add("DateTime");
        comboBox1.Items.Add("Decimal");
        comboBox1.Items.Add("Double");
        comboBox1.Items.Add("Int16");
        comboBox1.Items.Add("Int32");
        comboBox1.Items.Add("Int64");
        comboBox1.Items.Add("String");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        tn = txtTableName.Text;

        customer = new DataTable(tn);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        cn = txtColumnName.Text;
        customer.Columns.Add(cn , typeof(long));
        dataGridView1.DataSource = customer;
    }
 }
 }

【问题讨论】:

  • typeof(long) 还是 typeof(cn)?
  • @UthistranS。 cn 只是一个字符串,其中包含从 TextBox 获取它的列名,我希望选择的值代替 typeof(long) 但我收到错误
  • 我们没有看到你的错误。错误信息是什么意思?
  • @OlivierJacot-Descombes 这段代码是对的,我想替换 ComboBox selected Item 中的 typeof 值,像这样:` customer.Columns.Add(cn , typeof(combobox1.SelectedItem)); `

标签: c# combobox


【解决方案1】:

C# 区分大小写。 combobox1comboBox1 不一样。由于您的组合框被命名为comboBox1 并带有大写“B”,因此可以这样写:

customer.Columns.Add(cn ,
    Type.GetType("System." + (string)comboBox1.SelectedItem));
'                                         ^ upper case "B"

您可以有两个仅大小写不同的变量:

int x = 1;
int X = 100;

这确实是两个不同的变量!


注意:获取Type 对象有不同的方法:

  1. 来自作为标识符给出的类型名称

     Type t = typeof(int); // typeof(int) is known at compile time.
    
  2. 从一个对象

     Type t = someObject.GetType(); // Known only at runtime.
    
  3. 来自以字符串形式给出的类型名称

     string s = "System.Int32";
     Type t = Type.GetType(s);
    

注意:GetType() 是一个所有类型都继承自 System.Object 的方法。


由于组合框中有类型名称字符串,请使用第三个版本。

Type t = Type.GetType("System." + (string)comboBox1.SelectedItem);
customer.Columns.Add(cn , t);

或者直接将Type 对象添加到您的组合框中,而不是字符串:

comboBox1.Items.Add(typeof(bool));
comboBox1.Items.Add(typeof(byte));

然后简单地获取类型

Type t = (Type)comboBox1.SelectedItem;
customer.Columns.Add(cn , t);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2011-10-05
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多