使用网格视图

时间:2011-08-12 08:32:28

标签: c# asp.net linq-to-sql gridview

<asp:GridView ID="gridInboxMessage" runat="server" 
            AutoGenerateColumns="False" 
            DataSourceID="LinqDataSource1">
    <Columns>
        <asp:BoundField DataField="Title" HeaderText="title" ReadOnly="True" SortExpression="Title" />
        <asp:BoundField DataField="Body" HeaderText="body" ReadOnly="True" SortExpression="Body" />
        <asp:BoundField DataField="Sender" HeaderText="sender" ReadOnly="True" SortExpression="Sender" />
        <asp:BoundField DataField="Date1" HeaderText="date" ReadOnly="True" SortExpression="Date1" />
    </Columns>
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
            ContextTypeName="DataClassesDataContext"
            Select="new (Title, Body, Sender, Date1)" 
            TableName="PrivateMessages" 
            Where="Receptor == @Receptor">
    <WhereParameters>
        <asp:QueryStringParameter Name="Receptor" QueryStringField="idCompany" Type="String" />
    </WhereParameters>
</asp:LinqDataSource>

我有一个从LinqDataSource填充的asp:GridView。我的问题是

  1. 包含的身体是1000个字符我在身体的字段中只能显示50个字符(过流隐藏)。
  2. 字段date内容1/1/2011我希望在字段jul 1 2011中显示date
  3. 字段sender等于id(示例23)我想要显示名称(23 = alen)
  4. 我将如何实现所有这些目标?

    修改

    回答@naveen是对的。

    我希望当用户点击行显示正文????

2 个答案:

答案 0 :(得分:3)

试试这个。

标记

<asp:GridView ID="gridInboxMessage" runat="server" 
            AutoGenerateColumns="False" 
            DataSourceID="LinqDataSource1">
    <Columns>
        <asp:BoundField DataField="Title" HeaderText="title" ReadOnly="True" SortExpression="Title" />

        <asp:TemplateField HeaderText="Body" SortExpression="Body">
            <ItemTemplate>
                <asp:Label ID="MyBody" runat="server"
                        Text='<%# TruncateText(Eval("Body"))%>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Sender">
            <ItemTemplate>
                <asp:Label ID="MySender" runat="server"
                        Text='<%# GetSenderNameFromID(Eval("Sender"))%>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Date" SortExpression="Date1">
            <ItemTemplate>
                <asp:Label ID="MyDate" runat="server"
                        Text='<%# DataBinder.Eval(Container.DataItem, "Date1", "{0:MMMM d yyy}")%>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

背后的代码

protected string TruncateText(object objBody)
{
    string truncated = "";
    if (objBody != null)
    {
        truncated = objBody.ToString().Length > 50 ? 
            objBody.ToString().Substring(0, 47) + "..." : objBody.ToString();
    }
    return truncated;
}

protected string GetSenderNameFromID(object objSenderID)
{
    string senderName = "";
    if (objSenderID != null)
    {
        senderName = CallDatabaseToGetNameFromID();
    }
    return senderName;
}

private string CallDatabaseToGetNameFromID()
{
    //implement your database call to retrieve sender name from id
    throw new NotImplementedException();
}

希望这有帮助。

答案 1 :(得分:0)

首先,如果要显示发件人名称而不是ID,则必须修改查询以加入包含名称的表

对于日期问题,您可以使用格式(日期,“dd / mm / yyyy”)

在绑定到网格之前,您能确保查询实际返回所有字符吗?