Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 引用多个数据表的下拉列表_C#_Drop Down Menu_Datatable - Fatal编程技术网

C# 引用多个数据表的下拉列表

C# 引用多个数据表的下拉列表,c#,drop-down-menu,datatable,C#,Drop Down Menu,Datatable,我正在创建一个WMI程序,将查询输出到数据表,然后输出到数据网格。我想创建一个历史记录下拉列表,将当前日期和时间作为一个项目,并将刚刚创建的数据表克隆为一个“值” 选择下拉列表中的项目会将数据网格更改为当时运行的任何以前的数据表 这是到目前为止的代码,但我不确定如何将数据表添加为字符串或数组 // copy current data table DataTable cloneTable = new DataTable(); cloneTable = dt.Copy(); ddlEventhi

我正在创建一个WMI程序,将查询输出到数据表,然后输出到数据网格。我想创建一个历史记录下拉列表,将当前日期和时间作为一个项目,并将刚刚创建的数据表克隆为一个“值”

选择下拉列表中的项目会将数据网格更改为当时运行的任何以前的数据表

这是到目前为止的代码,但我不确定如何将数据表添加为字符串或数组

// copy current data table

DataTable cloneTable = new DataTable();
cloneTable = dt.Copy();

ddlEventhistory.Items.Add(new Data { 
    Name = DateTime.Now.ToString(), 
    Value = cloneTable () 
}); 
ddlEventhistory.DisplayMember = "Name";
ddlEventhistory.ValueMember = "Value";
更新1:这是我的自定义类:

 private class Data 
 { 
     public string Name { get; set; } 
     public Object Value { get; set; } 
 }
更新2:下面是我的下拉列表更改的情况:

private void ddlEventhistory_SelectionChangeCommitted(object sender, EventArgs e)
{
    dgEvent.DataSource = (ddlEventhistory.SelectedValue as Data).Value as DataTable;                 
}
更新3:以下是最终代码

private class Data 
 { 
     public string Name { get; set; } 
     public Object Value { get; set; } 
 }

//History

        //take existing data table and copy it's source
        DataTable eventhistory = new DataTable();
        eventhistory = (DataTable)dgEvent.DataSource;

        ddlEventhistory.Items.Add(new Data { Name = DateTime.Now.ToString(), Value = eventhistory });
        ddlEventhistory.DisplayMember = "Name";
        ddlEventhistory.ValueMember = "Value";

//when drop down list selection is changed do....

private void ddlEventhistory_SelectionChangeCommitted(object sender, EventArgs e)
    {
        // Assign DataTable of selected ComboBox item to DataGrid.
       dgEvent.DataSource = (ddlEventhistory.SelectedItem as Data).Value as DataTable;
    }

您可以像这样将数据的副本添加到组合框项目中

//copy current data table
DataTable cloneTable = dt.Copy();

ddlEventhistory.Items.Add(new Data { Name = DateTime.Now.ToString(), Value = cloneTable }); 
ddlEventhistory.DisplayMember = "Name";
ddlEventhistory.ValueMember = "Value";
private void ddlEventhistory_SelectionChangeCommitted(object sender, EventArgs e)
{
    // Assign DataTable of selected ComboBox item to DataGrid.
    dgEvent.DataSource = (ddlEventhistory.SelectedItem as Data).Value as DataTable;
}
然后,当用户选择其中一项时,您可以将其显示在数据网格中,如下所示

//copy current data table
DataTable cloneTable = dt.Copy();

ddlEventhistory.Items.Add(new Data { Name = DateTime.Now.ToString(), Value = cloneTable }); 
ddlEventhistory.DisplayMember = "Name";
ddlEventhistory.ValueMember = "Value";
private void ddlEventhistory_SelectionChangeCommitted(object sender, EventArgs e)
{
    // Assign DataTable of selected ComboBox item to DataGrid.
    dgEvent.DataSource = (ddlEventhistory.SelectedItem as Data).Value as DataTable;
}

1. <代码>新数据表()dt.Clone(),2分配新对象,则不需要使用code>。什么是ddlEventHistory(假设是datagrid)?ddlEventHistory是我的dropdownlist名称,我在那里有一个新的名称,因此每次搜索完成时(我使用后台工作程序及其运行中的工作程序完成)它都会创建一个新的克隆。您正在向dropdownlist添加
数据的实例。那是自定义类吗?如果是,Value属性的数据类型是什么?如果它是object,你不能直接将cloneTable分配给它吗?是的,它是一个自定义类,我尝试将其分配为object和datatable,但当我尝试发送datagrid的数据源时,它只是显示为空。这是当用户更改列表时我使用的代码
private void ddlEventhistory\u SelectedIndexChanged(对象发送方,事件参数e){dgEvent.DataSource=ddlEventhistory.SelectedValue;}
dgEvent是我的数据网格名称。谢谢你迄今为止的帮助!将
SelectedValue
分配给
dgEvent.DataSource
将不起作用,因为它的值是
Data
的实例,
DataSource
需要实现
IListSource
IEnumerable
IDataSource
类似
DataTable
。您可以尝试
dgEvent.DataSource=(ddleventshistory.SelectedValue作为数据)。此语句将您的
DataTable
设置为
DataSource
。我尝试了该代码,但仍然不起作用,但是异常错误现在消失了。当我从ddlEventhistory中选择一个历史记录时,datagrid就消失了,只留下了网格控件本身,其中没有表。我使用的是BackgroundND worker,如果有帮助,上面的复制数据表代码将用于runworkercompleted事件。还有其他建议吗?谢谢成功了!,我不得不添加这一行
DataTable eventhistory=newdatatable();eventhistory=(DataTable)dgEvent.DataSource我将标记您的答案并更新我使用的最终代码。谢谢你的帮助。哇,这有点棘手。显然,SelectedValue将为null以填充数据网格。我已经更新了答案,以反映这一要求。