|
[XAMl]
<sfgrid:SfDataGrid.Columns>
<sfgrid:GridTextColumn MappingName="OrderID" LoadUIView="True" />
<sfgrid:GridTextColumn MappingName="CustomerID" LoadUIView="True" />
<sfgrid:GridTextColumn MappingName="ShipCountry" LoadUIView="True" />
</sfgrid:SfDataGrid.Columns>
[C#]
this.dataGrid.CellRenderers.Remove("TextView");
this.dataGrid.CellRenderers.Add("TextView", new GridCellTextViewRendererExt());
private void dataGrid_QueryCellStyle(object sender, QueryCellStyleEventArgs e)
{
if (e.ColumnIndex == 1)
{
e.Style.ForegroundColor = Color.Blue;
e.Handled = true;
}
}
public class GridCellTextViewRendererExt : GridCellTextViewRenderer
{
public override void OnInitializeDisplayView(DataColumnBase dataColumn, SfLabel view)
{
base.OnInitializeDisplayView(dataColumn, view);
if(dataColumn.ColumnIndex == 1)
view.TextDecorations = TextDecorations.Underline;
}
} |
|
<sfgrid:SfDataGrid.Columns>
<sfgrid:GridTemplateColumn MappingName="OrderID" Width="100">
<sfgrid:GridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Text="{Binding OrderID,Converter= {StaticResource Key= CustomValue}, ConverterParameter= {x:Reference viewModel}}" TextColor="Blue"
XAlign="Center" YAlign="Center" />
</DataTemplate>
</sfgrid:GridTemplateColumn.CellTemplate>
</sfgrid:GridTemplateColumn>
<sfgrid:GridTextColumn MappingName="CustomerID"/>
<sfgrid:GridTextColumn MappingName="EmployeeID"/>
<sfgrid:GridTextColumn MappingName="FirstName"/>
<sfgrid:GridTextColumn MappingName="ShipCountry"/>
</sfgrid:SfDataGrid.Columns>
[c#]
public class CustomValue : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var data = value as int?;
if(data != null)
{
var viewmodel = parameter as ViewModel;
//// Based on the column value fetched data from second table collection
var record = viewmodel.Table2.First(x => x.OrderID == data);
if(record != null)
{
return record.Description;
}
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
} |
Thanks for your feedback.
I have trouble right here. My Sfdatagrid's ItemSource is a
DataView, including the inner datatable (DataView.Table).
In your example, this is a ObservableCollection
I cannot bind the "Approve_Status" field to the Label in CellTemplate. This is my code. How to solve this case?
If possible,please use code behind instead of XML.
Thank you so
much!
My code :
+ Code celltemplate
GridTemplateColumn gtc_Int32 = new GridTemplateColumn();
sfDataGrid.Columns.Add(gtc_Int32);
gtc_Int32.CellTemplate = new DataTemplate(() =>
{
Label a = new Label();
Binding binding = new Binding();
binding.Path = "Approve_Status";
binding.Converter = new ConverterForCommonCombobox();
binding.ConverterParameter = dicDetailCommonColumnCombobox[dc.ColumnName].Values;
binding.Mode = BindingMode.OneWay;
a.SetBinding(Label.TextProperty, binding);
return a;
});
+ Code ItemSource sfDatagrid
ctr = new SfDataGrid();
view = new DataView();
view.Table = this.ViewModels.DtDataFormReturn.Rows.Count > 0 ? AddForClickHyperLink(AddForFilterUnicodeField(this.ViewModels.DtDataFormReturn)) : this.ViewModels.DtDataFormReturn;
var sfDataGrid = ((SfDataGrid)ctr);
sfDataGrid.ItemsSource = view;
|
dataGrid.ItemsSource = viewModel.GetDataTable();
GridTemplateColumn templateColumn = new GridTemplateColumn()
{
MappingName = "ApprovedStatus",
Width = 200,
};
var dataTemplate = new DataTemplate(() =>
{
var label = new Label()
{
TextColor = Color.Blue,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
};
//// Binding path dot will bind entire row value as binding value.
label.SetBinding(Label.TextProperty, new Binding(".", converter: new CustomValue()));
return label;
});
templateColumn.CellTemplate = dataTemplate;
dataGrid.Columns.Add(new GridTextColumn()
{
MappingName = "OrderID",
Width = 100,
});
dataGrid.Columns.Add(templateColumn);
public class CustomValue : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
var data = value as System.Data.DataRowView;
if (data != null)
{
return data.Row.ItemArray.GetValue(2).ToString();
}
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
} |
Chào Sơn Hoàng,Cảm ơn bạn đã cập nhật và vui mừng khi biết rằng giải pháp được cung cấp đáp ứng yêu cầu của bạn.chúng tôi đã kiểm tra yêu cầu hiện tại của bạn . Cách hiển thị thả xuống trong khi chỉnh sửa cột trạng thái Phê duyệt và mục đã chọn nên được thay thế trong dataview dưới dạng Xamarin. vui lòng chia sẻ các chi tiết sau đây để chuẩn bị mẫu cho yêu cầu của bạn.
- Là cột ApproveStatus và mô tả của nó nằm trong cùng một khung nhìn có thể truy cập được mà chúng ta liên kết với datagrid.
- Bạn có hiển thị cả cột trạng thái phê duyệt và cột mô tả tương ứng trong cột dữ liệu hoặc cột trạng thái Phê duyệt được hiển thị và cột mô tả không được tạo và thêm vào cột cột dữ liệu.
Vui lòng chia sẻ các chi tiết trên để xác nhận và chuẩn bị mẫu cho yêu cầu của bạn.Trân trọng,Pradeep Kumar B
Thank you so much, Pradeep Kumar B.