Contents
- Chat order in template
Having trouble getting help?
Contact Support
Contact Support
Customize ListView as Chat Window
4 Mar 202515 minutes to read
ListView can be customized as chat window. To achieve that, use the ListView template property and Avatar control.
* The ListView template property is used to showcase the ListView as chat window.
* Avatar control is used to design the image of contact person.
Refer the below template code snippet for Template of chat window.
var template = "<div class='settings'>" +
"${if(chat!=='receiver')}" +
"<div id='content'>" +
"<div class='name'>${text}</div>" +
"<div id='info'>${contact}</div></div>" +
"${if(avatar!=='')}" +
"<div id='image'><span class='e-avatar img1 e-avatar-circle'>${avatar}</span></div>" +
"${else}" +
"<div id='image'><span class='${pic} img1 e-avatar e-avatar-circle'> </span></div>" +
"${/if}" +
"${else}" +
"${if(avatar!=='')}" +
"<div id='image2'><span class='e-avatar img2 e-avatar-circle'>${avatar}</span></div>" +
"${else}" +
"<div id='image2'><span class='${pic} img2 e-avatar e-avatar-circle'> </span></div>" +
"${/if}" +
"<div id='content1'>" +
"<div class='name1'>${text}</div>" +
"<div id='info1'>${contact}</div>" +
"</div>" +
"${/if}" +
"</div>";
Chat order in template
In ListView template, we have rendered the list items based on receiver and sender information from dataSource of listview.
Adding messages to chat window
- Use textbox to get message from user.
- Add the textbox message to ListView dataSource using
addItem
method.
document.getElementById('btn').addEventListener('click', (e) => {
var value = document.getElementById('name').value;
document.getElementById('List').ej2_instances[0].addItem([{ text: "Amenda", contact: value, id: "2", avatar: "A", pic: "", chat: "receiver" }]);
});
@{
var template = "<div class='settings'>" +
"${if(chat!=='receiver')}" +
"<div id='content'>" +
"<div class='name'>${text}</div>" +
"<div id='info'>${contact}</div></div>" +
"${if(avatar!=='')}" +
"<div id='image'><span class='e-avatar img1 e-avatar-circle'>${avatar}</span></div>" +
"${else}" +
"<div id='image'><span class='${pic} img1 e-avatar e-avatar-circle'> </span></div>" +
"${/if}" +
"${else}" +
"${if(avatar!=='')}" +
"<div id='image2'><span class='e-avatar img2 e-avatar-circle'>${avatar}</span></div>" +
"${else}" +
"<div id='image2'><span class='${pic} img2 e-avatar e-avatar-circle'> </span></div>" +
"${/if}" +
"<div id='content1'>" +
"<div class='name1'>${text}</div>" +
"<div id='info1'>${contact}</div>" +
"</div>" +
"${/if}" +
"</div>";
}
@using Syncfusion.EJ2
@using Syncfusion.EJ2.Lists;
<ejs-listview id="list" dataSource="(IEnumerable<object>)ViewBag.dataSource" showHeader="true" headerTitle="Chat" width="350" template="@template">
<e-listview-fieldsettings text="text"></e-listview-fieldsettings>
</ejs-listview>
<div style="width: 350px;margin: 0 auto;">
<input id="name" style="width: 275px" class="e-input" type="text" placeholder="Type your message" />
<ejs-button id="btn">
<e-content-template>Send</e-content-template>
</ejs-button>
</div>
<style>
#btn {
float: right;
}
#list {
margin: 0 auto;
border: 1px solid #ccc;
}
#list .e-list-item {
height: auto;
cursor: pointer;
}
#list .e-list-header .e-text {
font-family: sans-serif;
font-size: 18px;
line-height: 26px;
}
#list #info,
#list .name {
font-size: 11px;
line-height: 20px;
}
#list .name {
padding-top: 3px;
font-weight: 500;
padding-left: 150px;
}
#list #info {
float: right;
margin-right: 10px;
}
.pic01 {
background-image: url("https://ej2.syncfusion.com/demos/src/grid/images/1.png");
}
.pic02 {
background-image: url("https://ej2.syncfusion.com/demos/src/grid/images/3.png");
}
.pic03 {
background-image: url("https://ej2.syncfusion.com/demos/src/grid/images/5.png");
}
.pic04 {
background-image: url("https://ej2.syncfusion.com/demos/src/grid/images/2.png");
}
.img2.e-avatar {
margin-left: 10px;
margin-top: 2px !important;
font-size: 13px;
}
#list #content1 {
width: 200px;
background-color: aliceblue;
display: inline-block;
margin: 5px;
}
#list #info1,
#list .name1 {
font-size: 11px;
line-height: 20px;
margin-left: 10px;
}
#list .name1 {
padding-top: 3px;
font-weight: 500;
}
#list #content {
margin: 5px;
width: 200px;
margin-left: 90px;
background-color: aliceblue;
display: inline-block;
}
#image {
float: right;
display: inline-block;
}
#image2 {
float: left;
display: inline-block;
}
.img1.e-avatar {
margin-right: 10px;
margin: 5px;
font-size: 13px;
}
.e-listview .e-list-item {
padding: 0px !important;
}
.e-listview .e-list-header {
color: white !important;
}
.e-listview .e-list-header {
background: rgb(2, 120, 215) !important;
}
#list.e-listview .e-list-item.e-hover {
background-color: transparent;
}
</style>
<script>
document.getElementById('btn').addEventListener('click', (e) => {
let value = document.getElementById('name').value;
document.getElementById('list').ej2_instances[0].addItem([{ text: "Amenda", contact: value, id: "2", avatar: "A", pic: "", chat: "receiver" }]);
document.getElementById('name').value = "";
});
</script>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WebApplication1.Controllers
{
public class ListViewController : Controller
{
public IActionResult list()
{
List<object> listData = new List<object>();
listData.Add(new
{
text = "Jenifer",
contact = "Hi",
id = "1",
avatar = "",
pic = "pic01",
chat = "sender"
});
listData.Add(new { text = "Amenda", contact = "Hello", id = "2", avatar = "A", pic = "", chat = "receiver" });
listData.Add(new
{
text = "Jenifer",
contact = "What Knid of application going to launch",
id = "4",
avatar = "",
pic = "pic02",
chat = "sender"
});
listData.Add(new
{
text = "Amenda ",
contact = "A knid of Emergency broadcast App",
id = "5",
avatar = "A",
pic = "",
chat = "receiver"
});
listData.Add(new
{
text = "Jacob",
contact = "Can you please elaborate",
id = "6",
avatar = "",
pic = "pic04",
chat = "sender"
});
ViewBag.dataSource = listData;
return View();
}
}
}