DataGridCell的格式化输出

黑娃 2014-09-30 02:41:01
我用的wpf中的DataGrid,数据用ItemSource绑定得到,其中有一列叫采样方式,但数据源的值是三位小数,我希望通过动态加载DataGridCellStyle的方式,用IValueConverter格式化输出为两位小数,以下是代码:
xaml:
<Style x:Key="dataGridColumnStyleMulti采样方式" TargetType="DataGridCell">
<Setter Property="Content">
<Setter.Value>
<MultiBinding Converter="{StaticResource dataGridValueConverterMulti}" ConverterParameter="采样方式">
<Binding Path="采样方式"></Binding>
<Binding Path="自定义数据"></Binding>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>

cs:
public class DataGridValueConverterMulti : IMultiValueConverter
{
public object Convert(object []value, Type targetType, object parameter, CultureInfo culture)
{
string fun = parameter.ToString();
if (fun == "采样方式")
{
string display = "手动";
if (value[0].ToString() == "2")
display = "自动";

return display;
}
。。。

可是没有效果,不知道应该怎么使用才是?
...全文
384 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑娃 2014-10-09
  • 打赏
  • 举报
回复
看来没有人知道了,我还是采用修改数据源的办法吧。。。
黑娃 2014-10-08
  • 打赏
  • 举报
回复
引用 10 楼 dianjixue1 的回复:
这么写试试 <Style x:Key="dataGridColumnStyleMulti采样方式" TargetType="DataGridCell"> <Style.Resources> <base:DataGridValueConverterMulti x:Key="dataGridValueConverterMulti" /> </Style.Resources> <Setter Property="Content"> <Setter.Value> <MultiBinding Converter="{StaticResource dataGridValueConverterMulti}" ConverterParameter="采样方式"> <Binding Path="采样方式"></Binding> <Binding Path="自定义数据"></Binding> </MultiBinding> </Setter.Value> </Setter> </Style>
额。。。我绑定上了的,只是这里没展示出来,多谢你的热心,我用这种方式改变其他属性都是成功的,比如背景色,isEnable
dianjixue1 2014-10-08
  • 打赏
  • 举报
回复
这么写试试 <Style x:Key="dataGridColumnStyleMulti采样方式" TargetType="DataGridCell"> <Style.Resources> <base:DataGridValueConverterMulti x:Key="dataGridValueConverterMulti" /> </Style.Resources> <Setter Property="Content"> <Setter.Value> <MultiBinding Converter="{StaticResource dataGridValueConverterMulti}" ConverterParameter="采样方式"> <Binding Path="采样方式"></Binding> <Binding Path="自定义数据"></Binding> </MultiBinding> </Setter.Value> </Setter> </Style>
dianjixue1 2014-10-08
  • 打赏
  • 举报
回复
写错误了,是dataGridValueConverterMulti没有绑定到DataGridValueConverterMulti上,是不是其他的地方有代码没展示出来
dianjixue1 2014-10-08
  • 打赏
  • 举报
回复
从你展示的代码上看,dataGridColumnStyleMulti采样方式这个对象,似乎没有绑定到DataGridValueConverterMulti这个类上。 IMultiValueConverter的官方示例上有一部分绑定代码,例如

<Window.Resources>
    <c:NameList x:Key="NameListData"/>
    <c:NameConverter x:Key="myNameConverter"/>


...


</Window.Resources>
具体我也没测试写法,但是dataGridColumnStyleMulti采样方式 与 DataGridValueConverterMulti类没有地方联系起来
黑娃 2014-10-08
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
你直接在后台做个for循环遍历一下修改数据源的数据不就得了 不就是替换字符串吗
这是最后的办法,不太符合我写的接口规则,比较粗鲁。这个字符串的特别处理本就是针对个别“列”,而我的接口是针对任意数据源,所以改动起来显得“笨拙”。
exception92 2014-10-08
  • 打赏
  • 举报
回复
引用 4 楼 falcomavin 的回复:
木有人懂吗,我找到一篇英文资料,貌似意思是说content是绑定的itemsource,通过这种转换方式,.NET不会自动更新。确实我试过,用这种方式转换背景,字体,isEnable都成功,就是content没有用。英文资料给出的解决方案是增加一个什么Attached依赖属性,我看不太明白。 http://www.scottlogic.com/blog/2009/06/25/silverlight-multibindings-how-to-attached-mutiple-bindings-to-a-single-property.html
你可以尝试 去了解一下WPF的 StringFormat
於黾 2014-10-08
  • 打赏
  • 举报
回复
你直接在后台做个for循环遍历一下修改数据源的数据不就得了 不就是替换字符串吗
黑娃 2014-10-08
  • 打赏
  • 举报
回复
木有人懂吗,我找到一篇英文资料,貌似意思是说content是绑定的itemsource,通过这种转换方式,.NET不会自动更新。确实我试过,用这种方式转换背景,字体,isEnable都成功,就是content没有用。英文资料给出的解决方案是增加一个什么Attached依赖属性,我看不太明白。 http://www.scottlogic.com/blog/2009/06/25/silverlight-multibindings-how-to-attached-mutiple-bindings-to-a-single-property.html
exception92 2014-10-08
  • 打赏
  • 举报
回复
文字叙述 跟 代码 真实 牛头不照马嘴。
黑娃 2014-10-08
  • 打赏
  • 举报
回复
难道没有人遇到类似问题?
黑娃 2014-10-08
  • 打赏
  • 举报
回复
这么久没有人回复一下啊
黑娃 2014-09-30
  • 打赏
  • 举报
回复
说错了,数据源是1或者2,我要转换成自动,手动
程序的学习是一个循序渐进的过程,一些常用的或经典代码应该保存下来以便日后使用。本文就给出一些.net的经典代码,希望对大家有所帮助……   1.弹出对话框.点击转向指定页面   Response.Write("");   Response.Write("");   2.弹出对话框   Response.Write("");   3.删除文件  string filename ="20059595157517.jpg"; pub.util.DeleteFile(HttpContext.Current.Server.MapPath("../file/")+filename);   4.绑定下拉列表框datalist System.Data.DataView dv=conn.Exec_ex("select -1 as code,'请选择经营模式' as content from dealin union select code,content from dealin");   this.dealincode.DataSource=dv;   this.dealincode.DataTextField="content";   this.dealincode.DataValueField="code";   this.dealincode.DataBind();   this.dealincode.Items.FindByValue(dv[0]["dealincode"].ToString()).Selected=true;   5.时间去秒显示 <%# System.DateTime.Parse(DataBinder.Eval(Container.DataItem,"begtime").ToString()).ToShortDateString()%>   6.标题带链接 <%# ""+ DataBinder.Eval(Container.DataItem,"proname")+""%>   7.修改转向 <%# ""+"修改"+""%>   8.弹出确定按钮 <%# ""+"删除"+""%>   9.输出数据格式化 "{0:F2}" 是格式 F2表示小数点后剩两位 <%# DataBinder.Eval(Container, "DataItem.PriceMoney","{0:F2}") %>   10.提取动态网页内容   Uri uri = new Uri("http://www.webjx.com/");   WebRequest req = WebRequest.Create(uri);   WebResponse resp = req.GetResponse();   Stream str = resp.GetResponseStream();   StreamReader sr = new StreamReader(str,System.Text.Encoding.Default);   string t = sr.ReadToEnd();   this.Response.Write(t.ToString()); 11.获取" . "后面的字符   i.ToString().Trim().Substring(i.ToString().Trim().LastIndexOf(".")+1).ToLower().Trim()   12. 打开新的窗口并传送参数:   传送参数:   Button1.Attributes.Add("onclick","return confirm('确认?')"); button.attributes.add("onclick","if(confirm('are you sure...?')){return true;}else{return false;}")   接收参数:   string a = Request.QueryString("id");   string b = Request.QueryString("id1");   13.为按钮添加对话框   Button1.Attributes.Add("onclick","return confirm('确认?')");   button.attributes.add("onclick","if(confirm('are you sure...?')){return true;}else{return false;}")   14.删除表格选定记录   int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];   string deleteCmd = "Delete from Employee where emp_id = " + intEmpID.ToString()   15.删除表格记录警告   private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)   {   switch(e.Item.ItemType)   {   case ListItemType.Item :   case ListItemType.AlternatingItem :   case ListItemType.EditItem:   TableCell myTableCell;   myTableCell = e.Item.Cells[14];   LinkButton myDeleteButton ;   myDeleteButton = (LinkButton)myTableCell.Controls[0];   myDeleteButton.Attributes.Add("onclick","return confirm('您是否确定要删除这条信息');");   break;   default:   break;   }   }   16.点击表格行链接另一页   private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)   {   //点击表格打开   if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   e.Item.Attributes.Add("onclick","window.open('Default.aspx?id=" + e.Item.Cells[0].Text + "');");   }   双击表格连接到另一页   在itemDataBind事件中   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   {   string orderItemID =e.item.cells[1].Text;   e.item.Attributes.Add("ondblclick", "location.href='../ShippedGrid.aspx?id=" + orderItemID + "'");   }   双击表格打开新一页   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   {   string orderItemID =e.item.cells[1].Text;   e.item.Attributes.Add("ondblclick", "open('../ShippedGrid.aspx?id=" + orderItemID + "')");   }   16.表格超连接列传递参数   <asp:HyperLinkColumn Target="_blank" headertext="ID号" DataTextField="id" NavigateUrl="aaa.aspx?id=' <%# DataBinder.Eval(Container.DataItem, "数据字段1")%>' & name='<%# DataBinder.Eval(Container.DataItem, "数据字段2")%>' />   17.表格点击改变颜色 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)   {   e.Item.Attributes.Add("onclick","this.style.backgroundColor='#99cc00';   this.style.color='buttontext';this.style.cursor='default';");   }   写在DataGrid的_ItemDataBound里 if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)   {   e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#99cc00';   this.style.color='buttontext';this.style.cursor='default';");   e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='';this.style.color='';");   }   18.关于日期格式   日期格式设定   DataFormatString="{0:yyyy-MM-dd}"   我觉得应该在itembound事件中 e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))   19.获取错误信息并到指定页面   不要使用Response.Redirect,而应该使用Server.Transfer   // in global.asax   protected void Application_Error(Object sender, EventArgs e) {   if (Server.GetLastError() is HttpUnhandledException)   Server.Transfer("MyErrorPage.aspx");   //其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay了 :)   }   Redirect会导致post-back的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理   20.清空Cookie   Cookie.Expires=[DateTime];   Response.Cookies("UserName").Expires = 0 21.自定义异常处理   //自定义异常处理类   using System;   using System.Diagnostics;   namespace MyAppException   {   ///   /// 从系统异常类ApplicationException继承的应用程序异常处理类。   /// 自动将异常内容记录到Windows NT/2000的应用程序日志   ///   public class AppException:System.ApplicationException   {   public AppException()   {   if (ApplicationConfiguration.EventLogEnabled)LogEvent("出现一个未知错误。");   }   public AppException(string message)   {   LogEvent(message);   }   public AppException(string message,Exception innerException)   {   LogEvent(message);   if (innerException != null)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧