WPF 里怎么用代码动态的确定 Grid的行列数呢

WPF 里怎么用代码动态的确定 Grid的行列数呢,第1张

主窗体上放一个Grid,名字为“MainGrid"

ColumnDefinition和RowDefinition的Width和Height属性的值是GridLength对象。和XAML里一样,GridLength有三种值,Auto,Star,Pixel。

下面的代码没有显示设置这两个属性,因为它们的默认值都是 1,正符合等分的要求。

private void MainWindow_Loaded(object sender, SystemWindowsRoutedEventArgs e)

{

for (int i = 1; i <= 5; i++) {

MainGridColumnDefinitionsAdd(new ColumnDefinition());

MainGridRowDefinitionsAdd(new RowDefinition());

}

MainGridShowGridLines = true; // 测试用,可以去掉

Button crl = default(Button);

for (int c = 0; c <= 4; c++) {

for (int r = 0; r <= 4; r++) {

crl = new Button { Content = stringFormat("Button{0}-{1}", r, c) };

GridSetColumn(crl, c);

GridSetRow(crl, r);

MainGridChildrenAdd(crl);

}

}

}

用的是aspnet,GridView实现它的RowDataBound事件,具体看代码,仅供参考:

前台:

<html xmlns="

<head runat="server">

    <title></title>

    <!--点击GridView任意行的位置,获取该行的ID值-->

    <script type="text/javascript">

        function getId(row_index) {

            var grid_view = documentgetElementById('<%=GridView1ClientID %>');

            var rows = grid_viewrows;

            var personID = rows[row_index]cells[0]innerHTML;

            alert("获取的ID为:" + personID);

        }

    </script>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">

            <Columns>

                <asp:BoundField HeaderText="ID" DataField="ID" HeaderStyle-Width="300px" ItemStyle-HorizontalAlign="Center"

                    HeaderStyle-BackColor="LightSkyBlue" />

                <asp:BoundField HeaderText="Name" DataField="Name" HeaderStyle-Width="300px" ItemStyle-HorizontalAlign="Center"

                    HeaderStyle-BackColor="LightSkyBlue" />

                <asp:BoundField HeaderText="Tel" DataField="Tel" HeaderStyle-Width="300px" ItemStyle-HorizontalAlign="Center"

                    HeaderStyle-BackColor="LightSkyBlue" />

            </Columns>

        </asp:GridView>

    </div>

    </form>

</body>

</html>

后台代码:

public partial class WebForm1 : SystemWebUIPage

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            List<Person> list = new List<Person>();

            listAdd(new Person("001", "张三"));

            listAdd(new Person("002", "李四"));

            listAdd(new Person("003", "王五"));

            listAdd(new Person("004", "赵六"));

            listAdd(new Person("005", "何七"));

            GridView1DataSource = list;

            GridView1DataBind();

        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

        {

            if (eRowRowType == DataControlRowTypeDataRow)

            {

                int row_index = eRowRowIndex + 1;

                eRowAttributesAdd("onclick", "getId(" + row_index + ");");

            }

        }

    }

    class Person

    {

        public Person(string id, string name)

        {

            ID = id;

            Name = name;

        }

        private string id;

        public string ID

        {

            get { return id; }

            set { id = value; }

        }

        private string name;

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        private string tel;

        public string Tel

        {

            get { return tel; }

            set { tel = value; }

        }

    }

下拉菜单你自己加进去就行了,东西是filelistbox,现在设file1为filelistbox的名字,那么:Dim obj As ExcelApplication

Set ExcelApp = CreateObject("ExcelApplication") '创建EXCEL对象

Set ExcelBook = ExcelAppWorkbooksOpen(File1Path & "\" & File1) '(打开excel文件,这里的file1path&"\"&file1 指的就是下拉菜单的excel的路径。

Set ExcelSheet = ExcelBookWorksheets(1)’现在就可以利用将excelsheet来读取所选的excel的行和列了。具体为:设置一个变量 dim k as integer,写一个循环以k=1到k=1000(假如你有1000行数据)比如我们读取b1-b1000的值那么就用text1text=ExcelSheetRange("b" & k)Value,然后在后面写一个延时句子,延迟1-2秒,然后完成一个循环,就可以看到text1中的值一直在变化而且是从B1到B1000的值

现在算是吧值取出来了,至于怎么附到grid里应该很容易,自己看着来吧……,希望能多加点分^-^

示例:

var lastFlag ;

$gridTable = $("#gridTable")jqGrid( {

datatype : 'json',

colNames : ['age', 'sex' ],

colModel : [

{name : 'age',index : 'age',width : 80,editable:true,edittype:'text',editrules:{required:true}},

{name : 'sex',index : 'sex',width : 160,editable:true,edittype:'text',editrules:{required:true}}

],

rowNum : 10,

pager : "#tablePager",

multiselect : false,

viewrecords : true,

sortorder : "desc",

jsonReader : {

root : "dataRows",

repeatitems : false

},

caption : "数据列表",

height : "auto",

rownumbers : true,

onSelectRow : function(id){

if(id && id!=lastFlag){

$('#gridTable')jqGrid('saveRow',lastFlag);

lastFlag=id;

}

$('#gridTable')jqGrid('editRow',id,true);

},

editurl : "/propManagedomethod=doNothing"

})

/ 设置增行按钮的click事件处理 /

$("#addButton")bind("click", function() {

var selectedId = $("#gridTable")jqGrid("getGridParam", "selrow");

var dataRow = {

age: "",

sex: ""

};

var ids = jQuery("#gridTable")jqGrid('getDataIDs');

var rowid = getMaxId(ids) + 1;

if (selectedId) {

$("#gridTable")jqGrid("addRowData", rowid, dataRow, "after", selectedId);

} else {

$("#gridTable")jqGrid("addRowData", rowid, dataRow, "last");

}

})

/ 设置删行按钮的click事件处理 /

$("#removeButton")bind("click", function() {

var selectedId = $("#gridTable")jqGrid("getGridParam","selrow");

if(!selectedId){

alert("请选择要删除的行");

return;

}else{

$("#gridTable")jqGrid("delRowData", selectedId);

}

})

问题1:JQGRID 编辑模式下怎样取行数据?

用户 *** 作模拟:用户新增一行,鼠标点进去,该行进入编辑状态,填写数据,点击保存。

问题出现了: 点击保存以后,需要通过getRowData()获取表格里的数据传回后台,但是当行在编辑状态下时,getRowData()取得的值为类似<input ></input> 的html标签,不是编辑框中输入的值。

解决办法:

alert getRowData()获取出的数据,你会发现<input>标签的id是5_age, 6_age之类的,也就是行id+“_colModel name”,这就好办了,

做法就是找到编辑行的单元格的id,然后得到单元格里的内容,通过"setRowData"将其保存起来,然后再通过getRowData()取值。

示例:

var selectedId = $('#gridTable')jqGrid("getGridParam", "selrow");

var ageId = selectedId + "_age";

var sexId = selectedId + "_sex";

var age= $('#'+ageId)val();

var sex= $('#'+sexId)val();

$('#gridTable')jqGrid('setRowData',selectedId,{age:age,sex:sex},'');

  再通过getRowData()取值,结果正确。

方法比较多了,你可用sqlDataReader,不过其中的字段取出来,你得 new SqlDataReader()["字段名"]这样取 也可以用 将你读到的数据放在DataTable中。这样就相对于你的那张表,当然查看也就很容易了。

楼上回答为加过selectModel的情况下并改过select

事件绑定后才适用

通用的方式是

在建GRID时,加listener

new

ExtgridEditorGridPanel({

,

listeners:

{

cellclick

:

function(

Grid,

rowIndex,

columnIndex,e

){//使用cellclick

事件

STOREgetAt(rowIndx);//STORE为你为GRID绑定的store

}

}

})

这样既可

用mvvm模式,在逻辑代码层中根本就不需要知道前台有什么元素。推荐看一下mvvm,会少走很多弯路。

MVVM是Model-View-ViewModel的简写。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。

通过tableview的onEditing事件控制编辑状态,可以根据你的条件,符合条件的设置为:AAllow := False; 即可。 如果需要条件,代码和如下类似: if (TableViewControllerFocusedRecordValues[需要判断的列] = 值) and (AItemIndex= 第几列) th

以上就是关于WPF 里怎么用代码动态的确定 Grid的行列数呢全部的内容,包括:WPF 里怎么用代码动态的确定 Grid的行列数呢、js中怎么获取点击的gridview的行数、vb中怎么读取excel中的所有有效内容,并获取有效行列数,之后将excel中的全部内容显示到grid中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9601507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存