0

私は1つのツリービューを持っています。グリッドビューのように追加された文字列をフォーマットしたい:

<ItemTemplate>
<asp:Label ID="lbut_subject" runat="server" 
Text='<%#Eval("Inquiry_subject").ToString().Length > 10 ? Eval("Inquiry_subject").ToString().Substring(0,10)+"..." :Eval("Inquiry_subject") %>'
ToolTip='<%# Bind("Inquiry_subject") %>'></asp:Label>
</ItemTemplate>

ツリービューでこれをどのようにしたいですか:

<asp:TreeView ID="TV_Question_Summary" runat="server" ImageSet="Simple" ShowLines="True"  OnTreeNodeDataBound="TV_Question_Summary_DataBound" SkipLinkText=""> 
      <DataBindings>
        <asp:TreeNodeBinding DataMember="Root" FormatString=" {0}" TextField="" ValueField=""/>
        <asp:TreeNodeBinding DataMember="ParentNode" FormatString=" {0}" TextField="Inquiry_id" ValueField="Inquiry_id"/><asp:TreeNodeBinding DataMember="Node" FormatString=" {0}" TextField="body" ValueField="Inquiry_id" ToolTip="body"/>
     </DataBindings>
</asp:TreeView>

私はプレゼンテーションを文字列にしたい...ノードファイルのボディ文字列が15文字のオーバーフローを取得した場合...

テキストをバインドするには、次のコードを使用します。

 void fill_Tree()
    {
        using (SqlConnection conn = Util.GetConnection())
        {
            conn.Open();
            SqlCommand SqlCmd = new SqlCommand("Select * from tbl_Inquiry_History Where (IsDisplay='True')", conn);
            SqlDataReader Sdr = SqlCmd.ExecuteReader();
            SqlCmd.Dispose();
            string[,] ParentNode = new string[100, 2];
            int count = 0;
            while (Sdr.Read())
            {

                ParentNode[count, 0] = Sdr.GetValue(Sdr.GetOrdinal("Inquiry_id")).ToString();
                ParentNode[count++, 1] = Sdr.GetValue(Sdr.GetOrdinal("Inquiry_id")).ToString();

            }
            Sdr.Close();
            for (int loop = 0; loop < count; loop++)
            {
                TreeNode root = new TreeNode();
                root.Text = ParentNode[loop, 1];
                root.NavigateUrl = "~/Admin/OWM_Inquiry.aspx?inquiryid="+ ParentNode[loop, 1];
                SqlCommand Module_SqlCmd = new SqlCommand("Select * from tbl_Question where (Inquiry_id = @parent_id AND IsCount='False')", conn);
                Module_SqlCmd.Parameters.AddWithValue("@parent_id", ParentNode[loop, 0]);
                SqlDataReader Module_Sdr = Module_SqlCmd.ExecuteReader();
                while (Module_Sdr.Read())
                {
                    TreeNode child = new TreeNode();
                    child.Text = Module_Sdr.GetValue(Module_Sdr.GetOrdinal("body")).ToString();
                    child.NavigateUrl = "~/Admin/OWM_Inquiry.aspx?inquiryid="+ParentNode[loop, 0];
                    root.ChildNodes.Add(child);
                }

                Module_Sdr.Close();
                TV_Question_Summary.Nodes.Add(root);

            }
            TV_Question_Summary.CollapseAll();
        }

    }

私を助けてください...

4

1 に答える 1

1

次のように、埋め込みコード ブロックの代わりにコード ビハインド メソッドを使用してみてください。

protected string DisplayInquirySubject(string inquirySubject)
{
    return inquirySubject.Length > 10 
        ? inquirySubject.Substring(0, 10) 
        : inquirySubject;
}

マークアップで、次のようにメソッドを呼び出すことができます。

<ItemTemplate>
    <asp:Label ID="lbut_subject" runat="server" 
               Text='<%# DisplayInquirySubject(Eval("Inquiry_subject").ToString()) %>'
               ToolTip='<%# Bind("Inquiry_subject") %>'>
    </asp:Label>
</ItemTemplate>

これには 2 つの利点があります。マークアップ ロジックが簡素化され、Visual Studio コード エディター (Intellisenseおよびデバッグ) の機能を活用できるようになります。

于 2013-11-11T13:28:13.657 に答える