Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# 从dataGrid到字符串的项_C#_Xaml_Datagrid_Items - Fatal编程技术网

C# 从dataGrid到字符串的项

C# 从dataGrid到字符串的项,c#,xaml,datagrid,items,C#,Xaml,Datagrid,Items,我正在寻找一种方法,将SelectedItems从DataGrid转换成一个逗号分隔的字符串,该字符串可以传递到一个自动过程中 在我的代码中,我有一个DataGrid1,然后是第二个DataGrid2,它绑定到第一个列表中的SelectedItems。然后是绑定到第二个列表的项的文本框 这是我的DataGrid: <!-- items source based on selection of another data grid --> <DataGrid x:Name="MyD

我正在寻找一种方法,将
SelectedItems
DataGrid
转换成一个逗号分隔的字符串,该字符串可以传递到一个自动过程中

在我的代码中,我有一个
DataGrid1
,然后是第二个
DataGrid2
,它绑定到第一个列表中的
SelectedItems
。然后是绑定到第二个列表的
项的
文本框

这是我的
DataGrid

<!-- items source based on selection of another data grid -->
<DataGrid x:Name="MyDataGrid2" ItemsSource="{Binding ElementName=MyDataGrid,Path=SelectedItems}" AutoGenerateColumns="False"  SelectionMode="Extended"  Grid.Row="1" Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Items"  Width="Auto" >
            <DataGridTextColumn.Binding>
                <MultiBinding StringFormat="{}{0},{1},{2};">
                    <Binding XPath="ProjectOrderNo"/>
                    <Binding XPath="Style" />
                    <Binding XPath="CustomerNo" />
                </MultiBinding>
            </DataGridTextColumn.Binding>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
结果是
文本框
显示“(收集)”。我不确定如何将(集合)解析为逗号分隔的字符串。这是可以由
转换器处理的吗?
字符串的格式应如下所示:

Orderno
customerNo
ItemNo
<代码>订单号
客户号
项目号

可以由
StringBuilder
处理,但没有任何运气让项目在
转换器中处理

这是我的第一次尝试:

public class SelectedItemsToString : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string[] arr = ((IEnumerable)value).Cast<object>()
                                             .Select(x => x.ToString())
                                             .ToArray();
        var builder = new StringBuilder();
        foreach (var item in arr)
        {
            builder.AppendFormat(",",item);
        }
        string result = builder.ToString();
        return arr.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return "";
    }
}
public类SelectedItemsToString:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
字符串[]arr=((IEnumerable)值).Cast()
.Select(x=>x.ToString())
.ToArray();
var builder=新的StringBuilder();
foreach(arr中的var项目)
{
builder.AppendFormat(“,”项);
}
字符串结果=builder.ToString();
返回arr.ToString();
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
返回“”;
}
}

在转换器中,为什么要将其强制转换为对象?您是否有一个属性为Orderno、customerNo、ItemNo的类;Orderno、customerNo、ItemNo?我没有用于属性的类。您绑定到MyDatagrid1的ItemsSourceProperty的是什么?MyDatagrid1绑定到从SQL web服务返回的数据。您从web服务获得的数据是列表还是什么列表的列表?请参见,ItemsSource属性应允许您绑定到集合或列表。因此,我建议您格式化从web服务(如ObservableCollection)获得的数据。其中order类具有您提到的属性。
public class SelectedItemsToString : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string[] arr = ((IEnumerable)value).Cast<object>()
                                             .Select(x => x.ToString())
                                             .ToArray();
        var builder = new StringBuilder();
        foreach (var item in arr)
        {
            builder.AppendFormat(",",item);
        }
        string result = builder.ToString();
        return arr.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return "";
    }
}