javascript

Linq Expression larını birleştirmek

Bu yazıda DataSourceRequest nesnesi ile kendi yazdığımız bir linq expression ı nasıl birleştireceğimizi anlatacağım. Bu işlemi bir .net sınıfı olan ExpressionVisitor sınıfı ile yapacağız. Kullanacağımız custom ExpressionVisitor şu şekilde

class ParameterUpdateVisitor : ExpressionVisitor
    {
        private ParameterExpression _oldParameter;
        private ParameterExpression _newParameter;

        public ParameterUpdateVisitor(ParameterExpression oldParameter, ParameterExpression newParameter)
        {
            _oldParameter = oldParameter;
            _newParameter = newParameter;
        }

        protected override Expression VisitParameter(ParameterExpression node)
        {
            if (object.ReferenceEquals(node, _oldParameter))
                return _newParameter;

            return base.VisitParameter(node);
        }
        public static Expression<Func<T, bool>> UpdateParameter<T>(Expression<Func<T, bool>> expr,ParameterExpression newParameter)
        {
            var visitor = new ParameterUpdateVisitor(expr.Parameters[0], newParameter);
            var body = visitor.Visit(expr.Body);

            return Expression.Lambda<Func<T, bool>>(body, newParameter);
        }
    }
public Expression<Func<VType, bool>> KendoFilterExpression(DataSourceRequest req, Expression<Func<VType, bool>> predToJoin = null)
        {
            var str = "";
            if (req != null && req.Filter != null && req.Filter.Filters.Count() > 0)
            {
                str = req.Filter.ToExpressionMy(req.Filter.Filters.ToList(), CaseInSensitive);
                var dataVal = req.Filter.Filters.Select(a => (CaseInSensitive && a.Value.GetType() == "".GetType()) ? a.Value.ToString().ToUpperInvariant() : a.Value).ToArray();
                var kendoExp = System.Linq.Dynamic.DynamicExpression.ParseLambda<VType, bool>(str, dataVal);

                if (predToJoin != null)
                {
                    // linq içindeki parametreyi (a=> deki a) birleştireceğimiz expression ın parametresi ile aynı yapıyoruz
                    kendoExp = ParameterUpdateVisitor.UpdateParameter<VType>(kendoExp, predToJoin.Parameters.Single());
                    var e = Expression.Lambda<Func<VType, bool>>(Expression.And(predToJoin.Body, kendoExp.Body), kendoExp.Parameters);
                    return e;
                }
                else
                    return kendoExp;
            }
            else
            {
                if (predToJoin != null)
                    return predToJoin;
                else
                    return null;
            }
        }

Kendo Grid için varsayılan filtre operatörü özelliği

Kendo Grid için kolon varsayılan filtre operatörü eklentisi

kullanım basitçe şu şekilde:

columns: [{
field: “productName”,
// Buraya varsayılan olarak gelmesini istediğimiz filter operatörünü yazıyoruz
defaultFilter:”contains”
}, {
field: “category”
}
],

Örnek için tıklayınız

function InitColumnListMenu(e) {
  var menuColums = e.container.find("[role='menuitemcheckbox']");
	menuColums.each(function (index, item) {
		var columnChkInput = $(item).find("input");
		var columnName = columnChkInput.data("field");
  	var columnOption = e.sender.options.columns.filter(function (data) {
				return data.field == columnName;
			});
		if (columnOption.length &gt; 0) {
			var removable = columnOption[0].removable == false;
			var isDisabled = columnChkInput.prop("disabled");
			if (removable &amp;&amp; !isDisabled) {
				columnChkInput.attr("type", "radio");
				columnChkInput.parent().click(function (e) {
					var e = e || event;
					e.stopPropagation();
					return false;
				});
			}
		}
	});
}
function InitFilterMenu(e) {
  var drpDowns = $(e.container).find("[data-role='dropdownlist']").not('.k-filter-and');
	var numericInputs = $(e.container).find("[data-role='numerictextbox']");
	var inputs = $(e.container).find('input[type=text]').not(".k-formatted-value");
	if (inputs.length != drpDowns.length)
		return;

	var dfoCol;
	$(e.sender.options.columns).each(function (i, item) {
		if (item.field == e.field)
			dfoCol = item;
	});

	// defaultFilter
	drpDowns.each(function (i, select) {

    //kolon bulundu ise ve defaultFilter özelligi set edildi ise
		if (dfoCol &amp;&amp; dfoCol.defaultFilter &amp;&amp; inputs[i].value == "") 
		{
			var dfo = dfoCol.defaultFilter;
			var dfoOption = $(select).find("option[value='" + dfo + "']");
			if (dfoOption) {
				var dfoIndex = dfoOption.index();
				var d = $(select).getKendoDropDownList();
				d._initial = dfoCol.defaultFilter;
				d.select(dfoIndex);
				d.trigger('change');
			}
		}
	});
	numericInputs.each(function (i, nInput) {
		var editor = $(nInput).getKendoNumericTextBox();
     //kolon bulundu ise ve editorFormat özelligi set edildi ise
		if (dfoCol &amp;&amp; dfoCol.editorFormat)
		{
			editor.setOptions({
				format: dfoCol.editorFormat
			});
		}
    //kolon bulundu ise ve editorDecimals özelligi set edildi ise
		if (dfoCol &amp;&amp; dfoCol.editorDecimals) 
		{
			editor.setOptions({
				decimals: dfoCol.editorDecimals
			});
		}
	});
}
$("#grid").kendoGrid({
	selectable: "multiple cell",
	allowCopy: true,
	filterable: true,
	columns: [{
			field: "productName",
    defaultFilter:"contains"
		}, {
			field: "category"
		}
	],
  columnMenu:true,
 	filterMenuInit: function (e) {
    var that = e;
		e.sender.bind("open", function (e) {
			InitFilterMenu(that);
		});
	},
  columnMenuInit:function(e){
    if (e.sender.options.filterable) {
      var that = e;
			var filterMenu = e.container.find("[data-role='filtermenu']").getKendoFilterMenu();
			if (filterMenu) {
				filterMenu.popup.bind("open", function (e) {
					InitFilterMenu(that);
				});
			}
		}
  },
	dataSource: [{
			productName: "Tea",
			category: "Beverages"
		}, {
			productName: "Coffee",
			category: "Beverages"
		}, {
			productName: "Ham",
			category: "Food"
		}, {
			productName: "Bread",
			category: "Food"
		}
	]
});

Javascript ile html nesnelerinin yerini değiştirme

Javascript ile html nesnelerinin yerini değiştirme, yukarı aşağı kaydırma ve nesne silme işlemlerini basitçe nasıl yapabiliriz, işte size ufak bir örnek.

Başlık

<input type='text' id='baslik' name='baslik' />Değer

<input type='text' id='deger' name='deger' />

<input type='button' value='Ekle' onclick="AddItem()" />

<input type='button' value='Temizle' onclick="Clear()" />

<div id="data-list" name="data-list">

    <ul>

    </ul>

    <div id="data-list-count"></div>

</div>

function AddItem() {

    var baslik = $("#baslik").val();

    var deger = $("#deger").val();

    var dataListCount = GetCount();

    var dataListObj = $("#data-list").find("ul");

    var removeBtnText = "<a href='#' onclick='RemoveItem(event)'>Çıkar</a> ";

    var upBtnText     = "<a href='#' onclick='UpItem(event)'     >Yukarı</a> ";

    var downBtnText   = "<a href='#' onclick='DownItem(event)'>Aşağı</a> ";

    var itemText = "<li>"+dataListCount+" - " + removeBtnText + downBtnText + upBtnText + "<span class='badge'>" + deger + "</span>" + baslik + "</li>";

    dataListObj.append(itemText);

    UpdateCount();

}

function RemoveItem(e) {

    var evt = e || window.event; // this assign evt with the event object

    var current = evt.target || evt.srcElement; // this assign curr

    if($(current).parent().is("li")) {

        $(current).parent().remove();

    }

    UpdateCount();

}

function UpItem(e) {

    var evt = e || window.event; // this assign evt with the event object

    var current = evt.target || evt.srcElement; // this assign curr

    var upItem = $(current).parent().prev();



    if (upItem !== null && upItem.is("li")) {

        $(current).parent().swapWith(upItem);

    }

    UpdateCount();

}

function DownItem(e) {

    var evt = e || window.event; // this assign evt with the event object

    var current = evt.target || evt.srcElement; // this assign curr

    var downItem = $(current).parent().next();



    if (downItem !== null && downItem.is("li")) {

        $(current).parent().swapWith(downItem);

    }

    UpdateCount();

}

function Clear() {

    var baslik = $("#baslik").val();

    var deger = $("#deger").val();

    var dataListObj = $("#data-list").find("ul");

    dataListObj.empty();

    UpdateCount();

}

$.fn.swapWith = function(swap_with_selector) {

    var el1 = this;

    var el2 = $(swap_with_selector);



    if ( el1.length === 0 || el2.length === 0 )

        return;



    var el2_content = el2.html();

    el2.html(el1.html());

    el1.html(el2_content);

};

function GetCount()

{

    return $("#data-list").find("ul").find("li").length;

}

function UpdateCount() {

    $("#data-list-count").text("Toplam " + GetCount() + " seçenek");

}