-1

所以我想搜索我通过数据库输入的区号。我输入了代码,然后假设在多行文本框中打印出该区号下的电话号码和持续时间。这就是我到目前为止所拥有的。是的,我是一个初学者,也是一个糟糕的人:D。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'phonecallsDataSet1.Calls_with_Region' table. You can move, or remove it, as needed.
        this.calls_with_RegionTableAdapter.Fill(this.phonecallsDataSet1.Calls_with_Region);
        tbAreaCode.Text = String.Format("Phone Number" + "\t" + "\t" + "Duration" + "\r\n"
            + "============" + "\t" + "\t" + "=======");
    }

    private void btnSearchAC_Click(object sender, EventArgs e)
    {
        foreach (DataColumn number in phoneCallbindingSource.List)
        {
            if (txtAC.Text == ((int)number["Area Code"]))
            {
                tbAreaCode.Text += ((int)number["Phone Number"]); 
          }
        }
    }
}
}

错误

无法使用 [] 将索引应用于 System.Data.DataColumn 类型的表达式

4

2 回答 2

0

我认为查询数据库本身以获取此信息并用返回的值填充您的文本框或列表框是实现您想要实现的更好方法。

于 2013-11-02T19:46:32.937 回答
0

好的,所以问题是您正在按列而不是行进行迭代。这是一个工作示例,显示了做同一件事的两种方法。一个遍历 DataTable(您是否使用 DataSet,因为您有多个表?如果您只有一个表,请使用 DataTable,如果您有多个表,请使用 DataSet)。第二个使用我放入的 Linq,因为作为初学者,了解 C# 的一些更有用的特性会很有帮助。确保包括 System.Linq。只需将其粘贴到控制台应用程序的 Main 中,覆盖初始 Main 函数,您就可以使用它了。

static void Main(string[] args)
{
    string CurrentAreaCode = "415";// Input from textbox;

    // Setup Mock Dataset
    DataSet ds = new DataSet("Information");
    ds.Tables.Add("AreaCodeInformation");
    ds.Tables[0].Columns.Add("AreaCode");
    ds.Tables[0].Columns.Add("PhoneNumber");
    ds.Tables[0].Rows.Add();
    ds.Tables[0].Rows[0][0] = 415;
    ds.Tables[0].Rows[0][1] = 9252222222;

    // output with row iterator
    Console.WriteLine("Using Iteration of DataTable in DataSet");
    foreach (DataRow number in ds.Tables[0].AsEnumerable())
    {
        if (number["AreaCode"].ToString() == CurrentAreaCode)
        {
            Console.WriteLine(number["PhoneNumber"].ToString());
        }
    }
    Console.WriteLine("Press Enter To Continue...");
    Console.ReadLine();

    // output using Linq
    Console.WriteLine("Using Linq");
    Console.WriteLine((from info 
                       in ds.Tables["AreaCodeInformation"].AsEnumerable() 
                       where info.Field<string>("AreaCode") == CurrentAreaCode 
                       select info.Field<string>("PhoneNumber")).FirstOrDefault());
    Console.ReadLine();
}
于 2013-11-02T19:48:16.860 回答